我有问题,以保存在侵权人表上的fk在邮政。当我添加记录时,我试图保存客户ID。为了解决疑难问题,我增加了几行打印行,这是输出。正如您在下面看到的,正确的客户ID是存在的,但是客户是空的,所以它没有被保存到记录中。其他的字段保存得很好。请帮帮忙!我是个初学者。
forms.py中的客户为2
保存forms.py实例时,客户没有保存
views.py中的客户为2
在views.py中成功地保存了侵权者与其客户无
views.py
@login_required(login_url='login') def createInfringer(请求):customer=request.user.customer.id表单= InfringerForm(customer=customer)如果request.method == 'POST':form = InfringerForm(customer,( request.POST)如果form.is_valid():saved_instance = form.save( customer ) print (f'customer in views.py is {customer}')打印(f‘成功地用客户{saved_instance.customer}保存了views.py中的侵权者)返回重定向(’侵权者列表‘)上下文={'form':form}返回呈现(请求,’base/合成_form.html‘,上下文)
forms.py
类InfringerForm(ModelForm):class Meta: model =侵权人字段= 'name',‘name_name’,'status‘def __init__(self,customer,*args,**kwargs):super(InfringerForm,self).__init__(*args,**kwargs) .__init__( *args,**kwargs).save( *args,**kwargs)如果客户: print (f'customer in forms.py is { customer }') self.customer = customer instance.save() print (f‘forms.py实例保存在customer {instance.customer}')返回实例
models.py
类侵权者(models.Model):name = models.CharField(max_length=200) brand_name = models.CharField(max_length=200,null=True) updated = models.DateTimeField(auto_now=True) created = models.DateTimeField(auto_now_add=True) status = models.ForeignKey(Status,on_delete=models.SET_NULL,null=True) customer = models.ForeignKey(Customer,on_delete=models.SET_NULL,null=True) class Meta: ordering = '-updated','-created‘def __str__(self):返回self.name
发布于 2022-11-17 20:36:51
它可能有助于简化表单,例如:
class InfringerForm(ModelForm):
class Meta:
model = Infringer
fields = ['name', 'brand_name', 'status']
def __init__(self, customer, *args, **kwargs):
super().__init__(*args, **kwargs)
self.customer = customer
self.fields['status'].queryset = Status.objects.filter(customer=customer)
def save(self, *args, **kwargs):
self.instance.customer = self.customer
return super().save( *args, **kwargs)完成后,我们还可以将视图逻辑简化为:
@login_required(login_url='login')
def createInfringer(request):
customer = request.user.customer
form = InfringerForm(customer=customer)
if request.method == 'POST':
form = InfringerForm(customer, request.POST, request.FILES)
if form.is_valid():
saved_instance = form.save()
print (f'customer in views.py is {customer}')
print (f'Successfully saved the infringer in views.py with its customer {saved_instance.customer}')
return redirect('infringer-list')
return render (request, 'base/infringement_form.html', {'form': form})因此,我们使用的是客户,而不是它的主键,我们不再需要在.save()方法中传递客户。
https://stackoverflow.com/questions/74480931
复制相似问题