我有一个表单,希望request.user
尽可能少地填充,并依靠视图自动填充其他字段。
因此,其中某些字段不会呈现在窗体上。
我视图中的代码似乎对FK relationship
工作正常,但由于某种原因m2m
失败了。
这可能是我第一次尝试用m2m保存表单,我可能错过了一些东西。
目前,我用当前代码得到的错误是'VoucherForm' object has no attribute 'user'
。
如果我从视图中删除voucherform.user.add(userprofile)
,表单将保存,但不会添加用户。
- 型号**
class UserProfile(models.Model):
user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
class Voucher(models.Model):
user = models.ManyToManyField(User, blank=True)
venue = models.ForeignKey(Venue, blank=True, null=True, related_name="vouchervenues", on_delete=models.CASCADE)
title = models.TextField('voucher title', blank=True)
terms = models.TextField('terms & conditions', blank=True)
- 表格**
class VoucherForm(ModelForm):
class Meta:
model = Voucher
fields = ('title','terms')
labels ={
'title': '',
'terms': '',
}
widgets = {
'title': forms.TextInput(attrs={'class':'form-control', 'placeholder':'Enter title'}),
'terms': forms.TextInput(attrs={'class':'form-control', 'placeholder':'Enter terms'}),
}
- 浏览次数**
def add_voucher(request, userprofile_id):
url = request.META.get('HTTP_REFERER')
venue = UserProfile.objects.filter(user=request.user).values('venue')
userprofile = UserProfile.objects.get(id=userprofile_id)
submitted = False
if request.method =="POST":
voucherform = VoucherForm(request.POST)
if voucherform.is_valid():
data = voucherform.save(commit=False)
data.user_id = userprofile.id
data.venue_id = venue
data.save()
voucherform.save_m2m()
voucherform.user.add(userprofile)
return HttpResponseRedirect(url)
else:
voucherform = VoucherForm
if 'submitted' in request.GET:
submitted=True
return redirect('venue-loyalty-card',{'submitted':submitted,'userprofile':userprofile})
1条答案
按热度按时间l0oc07j21#
基本上,问题是您没有在
fields
处的VoucherForm
中提到user
字段,因此它说**'VoucherForm'对象没有属性'user'**,您可以执行以下操作:**注意:**使用
get_object_or_404()
比使用get()
更好,因为get_object_or_404()
在给定的模型管理器上调用get()
,但是它会引发Http404
而不是模型的DoesNotExist
异常。