Python Django在保存m2m关系时遇到问题

Python Django在保存m2m关系时遇到问题,python,django,django-forms,django-views,Python,Django,Django Forms,Django Views,我过去能够用表单保存m2m关系,但我目前在以下方面存在问题,我不明白为什么: # models.py class File(models.Model): client = models.ManyToManyField(Client) product = models.ForeignKey(Product, related_name='item_product') created = models.DateTimeField(default=datetime.now)

我过去能够用表单保存m2m关系,但我目前在以下方面存在问题,我不明白为什么:

# models.py

class File(models.Model):
    client = models.ManyToManyField(Client)
    product = models.ForeignKey(Product, related_name='item_product')
    created = models.DateTimeField(default=datetime.now)
    created_by = models.ForeignKey(User)

# forms.py

class FileForm(ModelForm):

    class Meta:
        model = File
        exclude = ('client')

    def CustomSave(self,product,client,user):
        temp = self.save(commit=False)
        temp.product = product
        temp.client = client   # < ?!?!
        temp.created_by = user
        temp.save()
        temp.save_m2m()
        return temp

# views.py

def new_client_view(request):

    if request.method == 'POST':
        try:
            i_product = int(request.POST['product'])
        except ValueError:
            raise Http404()
        # get a 'product' from the POST data
        p = Product.objects.get(id=i_product)

        formFile = FileForm(p, request.POST, auto_id='f_%s')
        formItemData = ItemDataForm(p, request.POST, auto_id='i_%s')

        if formFile.is_valid() and formItemData.is_valid():
            c = Client()
            c.save()
            tempFile = formFile.CustomSave(p,c,request.user)
            tempItem = ItemForm().CustomSave(tempFile,request.user)
            formItemData.CustomSave(tempItem,request.user)
            return redirect(client_view, c.id)
        else:
            return render_to_response('newClient.html', {'error':'The form was not valid'}, context_instance=RequestContext(request))
     else:
        return render_to_response('newClient.html', {}, context_instance=RequestContext(request))
django表示错误来自
temp.client=client

我尝试了
CustomSave
的各种排列,但没有取得多大成功:(


有什么想法吗?

您正在尝试将一个客户机分配给多个字段。如果它是客户机的外键,这将起作用,但对于多个客户机,您必须执行以下操作:

temp.client.add(client)

注意:
temp
必须先保存,然后才能分配客户端。这是因为有一个表Django使用将客户端映射到文件,如果该文件不首先存在,则不能添加带有空键的行。查看Django生成的表结构应该有助于清理问题。

您正在尝试将一个客户端分配给ManyToMany字段。如果它是客户的外键,则此字段可以工作,但对于ManyToMany,您必须执行以下操作:

temp.client.add(client)

注意:
temp
必须先保存,然后才能分配客户端。这是因为有一个表Django使用将客户端映射到文件,如果该文件不首先存在,则不能添加带有空键的行。查看Django生成的表结构应该有助于清理问题。

您正在尝试保存m2m relati在保存对象本身之前登录(commit=False)。要在客户端和文件之间创建关系,需要先保存文件

请看这里:

您试图在保存对象本身之前保存m2m关系(commit=False)。要在客户端和文件之间创建关系,需要先保存文件

请看这里:

我尝试在保存后插入它,得到的结果是
'File'对象没有属性“save\u m2m”
。因此我删除了
save\u m2m()
,并将其作为
formFile.save\u m2m()
放入视图,但得到了相同的错误:(
save\u m2m
在这里不需要,因为我们自己保存它。我删除了
save\u m2m()
并将
temp.client=client
替换为
temp.client.add(client)
,我仍然得到
'File'实例需要有主键值才能使用多对多关系。
对不起,请将
temp.client.add(client)
放在
temp.save()之后
。我找到你了。我的包!我尝试在保存后插入它,我得到的只是
“File”对象没有属性“save\u m2m”
。因此我删除了
save\u m2m()
,并将其作为
formFile.save\u m2m()
放在视图中,得到了相同的错误:(
save_m2m
在这里不需要,因为我们自己保存它。我删除了
save_m2m()
并将
temp.client=client
替换为
temp.client.add(client)
我仍然得到了
'File'实例需要有一个主键值才能使用多对多关系。
对不起,把
临时客户机添加(客户机)
放在
临时保存()之后。
我得到了。我的包!那篇文章没有显示你应该在哪里使用
保存\u m2m()
在codesave\u m2m中是手动操作的替代方法,因为代码建议post没有显示应该在哪里使用codesave\u m2m()在codesave\u m2m中是手动操作的替代方法,正如代码建议的那样