现在,当我尝试保存m2m数据时,它消失了,并说我应该使用ClientGroupe Manager …所以缺少了什么?
class Groupe(models.Model): nom = models.CharField(max_length=1500, blank=True) class Client(models.Model): nom = models.CharField(max_length=450, blank=True) prenom = models.CharField(max_length=450, blank=True) groupes = models.ManyToManyField(Groupe, null = True, blank = True, through='ClientGroupe') class ClientGroupe(models.Model): client = models.ForeignKey(Client) groupe = models.ForeignKey(Groupe) dt = models.DateField(null=True, blank=True) # the date the client is using its group's free rental rate class Meta: db_table = u'clients_groupes'
def modifier(request, id): client = Client.objects.get(id=id) form = ClientForm(instance = client) dict = { "form": form , "instance" : client } if request.method == "POST": form = ClientForm(request.POST, instance = client) if form.is_valid(): client_mod = form.save() id = client_mod.id return HttpResponseRedirect( "/client/%(id)s/?err=success" % {"id" : id} ) else: return HttpResponseRedirect( "/client/%(id)s/?err=warning" % {"id" : id} ) return render_to_response( "client/modifier.html" , dict , context_instance=RequestContext(request) )
编辑 :
这是ClientForm代码:
class ClientForm(ModelForm): class Meta: model = Client
编辑#2 :这是错误消息:
AttributeError at /client/445/ Cannot set values on a ManyToManyField which specifies an intermediary model. Use ClientGroupe's Manager instead. Request Method: POST Request URL: http://localhost/client/445/ Exception Type: AttributeError Exception Value: Cannot set values on a ManyToManyField which specifies an intermediary model. Use ClientGroupe's Manager instead. Exception Location: C:\Python25\lib\site-packages\django\db\models\fields\related.py in __set__, line 574 Python Executable: C:\xampp\apache\bin\apache.exe Python Version: 2.5.2
… if form.is_valid(): client_mod = form.save(commit=False) client_mod.save() for groupe in form.cleaned_data.get('groupes'): clientgroupe = ClientGroupe(client=client_mod, groupe=groupe) clientgroupe.save() …