Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不保存数据django Foreignkey模型_Python_Django_Django Models_Django Forms_Django Views - Fatal编程技术网

Python 不保存数据django Foreignkey模型

Python 不保存数据django Foreignkey模型,python,django,django-models,django-forms,django-views,Python,Django,Django Models,Django Forms,Django Views,我有两个模型。我想保存ForeignKey模型中的数据。我创建了一个模型表单,并使用我的主foreignkey模型保存。但是我在/c/customer/1上得到了这个错误值error/ 无法分配“1”:BillingData.customer必须是CustomerData实例 我创建了Django模型表单,并与视图进行了关联 models.py文件 类CustomerDatamodels。模型: 客户名称=型号。CharFieldmax\u长度=100 customer\u no=models.

我有两个模型。我想保存ForeignKey模型中的数据。我创建了一个模型表单,并使用我的主foreignkey模型保存。但是我在/c/customer/1上得到了这个错误值error/ 无法分配“1”:BillingData.customer必须是CustomerData实例

我创建了Django模型表单,并与视图进行了关联

models.py文件

类CustomerDatamodels。模型: 客户名称=型号。CharFieldmax\u长度=100 customer\u no=models.CharFieldmax\u length=100,默认值=,blank=True 移动电话号码=models.IntegerField 备选电话=型号。IntegerFieldFull=True,blank=True union\u name=models.ForeignKeyUnionName,on\u delete=models.SET\u NULL,NULL=True word\u name=models.ForeignKeyUnionWordName,on\u delete=models.SET\u NULL,NULL=True 完整地址=models.CharFieldmax长度=200,null=True,blank=True 创建\日期=模型。DateTimeFieldDauto\现在\添加=真 更新=模型。DateTimeFieldDauto_now=真 定义自身: 返回“%s,手机:%s”%self.customer\u name,self.Mobile\u number def get_absolute_urlself: 返回反向'customer_data',kwargs={'pk':self.pk} 类BillingDatamodels。模型: bill_no=models.CharFieldmax_length=100,默认值=,blank=True customer=models.ForeignKeyCustomerData,on_delete=models.CASCADE sales\u person=models.ForeignKeysettings.AUTH\u USER\u MODEL,on\u delete=models.SET\u NULL,NULL=True customer\u money=models.IntegerField 创建\日期=模型。DateTimeFieldDauto\现在\添加=真 更新=模型。DateTimeFieldDauto_now=真 定义自身: 返回“%s%s”%self.customer.customer\u name,self.create\u date.date def get_absolute_urlself: 返回反向'customers.views.BillingPage',kwargs={'pk':self.pk} forms.py文件

类BillCreateFormsforms.ModelForm: 工程量清单编号=表格。Charfield最大长度=100 customer=forms.ChoiceFieldchoices=[x.id,x.customer\u CustomerData.objects.all中x的名称] customer\u money=forms.IntegerField def saveself,commit=True: instance=superBillCreateForms,self.savecommit=False customer\u pk=self.cleanned\u数据['customer'] instance.customer=CustomerData.objects.getpk=customer\u pk instance.savecommit 返回实例 类元: 模型=计费数据 字段=‘账单号’、‘客户’、‘客户钱’, views.py文件

class CustomerDataView(FormMixin, generic.DetailView):
    model = CustomerData
    form_class = BillCreateForms
    template_name = "customers/customerdata_detail.html"
    print(form_class)

    success_url = '/c/'

    def post(self, request, *args, **kwargs):
        if not request.user.is_authenticated:
            return HttpResponseForbidden()
        form = self.get_form()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)
我希望使用foreignkey关系数据保存数据。但不保存在此处。

更改此行

instance.customer = CustomerData.objects.get(pk=customer_pk)


您无法在save方法中修复此问题,因为错误发生在它到达之前

您应该使用ModelChoiceField,而不是ChoiceField。这不仅可以解决问题,还可以删除整个save方法

customer = forms.ModelChoiceField(queryset=CustomerData.objects.all())

创建的相同问题“``无法分配“1”:BillingData.customer必须是CustomerData实例。``@AsaduzzamanSohel:该错误意味着您需要将customer对象从数据库中取出,然后使用该对象而不是对象的id。您需要弄清楚customer\u pk b/c中的内容看起来可能不仅仅是客户id。一旦知道pk的位置,就可以使用它来获取要分配给instance.Customer的CustomerData对象。您发布的代码不应该给出该错误。显示完全回溯。这是完全回溯
customer = forms.ModelChoiceField(queryset=CustomerData.objects.all())