没有“领域”属性使用ModelFormMixin禁止
问题描述:
我使用Django 1.11没有“领域”属性使用ModelFormMixin禁止
我创建了一个Form
并使用Class based view
创建一个记录并保存到数据库中。
商务/ models.py
class BusinessType(models.Model):
title = models.CharField(max_length=100)
created = models.DateTimeField('date created', auto_now_add=True)
modified = models.DateTimeField('last modified', auto_now=True)
class Meta:
db_table = 'business_types'
def __str__(self):
return self.title
class Business(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=200)
business_type = models.ForeignKey(BusinessType, on_delete=models.CASCADE)
created = models.DateTimeField('date created', auto_now_add=True)
modified = models.DateTimeField('last modified', auto_now=True)
class Meta:
verbose_name = 'business'
verbose_name_plural = 'businesses'
db_table = 'businesses'
def __str__(self):
return self.name
商务/ Forms.py
class BusinessForm(ModelForm):
class Meta:
model = Business
fields = ['user']
商务/ views.py
class BusinessCreate(LoginRequiredMixin, CreateView):
model = Business
form = BusinessForm
def form_valid(self, form):
messages.success(self.request, 'form is valid')
form.instance.user = self.request.user
form.save()
def get_success_url(self):
messages.success(self.request, 'Business Added Successfully')
return reverse('business:list')
在加载模板BusinessCreate
时出现如下错误:
禁止使用ModelFormMixin(BusinessCreate的基类),但不包含'fields'属性。
我的考验
移动fields
到views class
后,工作正常。但我不想这样做,因为我可能在多个视图上使用此表单,因此如果需要将来需要在多个页面上进行更改。
答
您的表单未被识别。这是因为您已使用form
在视图中设置属性,但正确的属性为form_class
。
(请注意,如果你正确设置form_class
,你不需要model
为好。)
感谢@daniel,我坚持了这个错误从去年 –
1周你能帮助更多的为'高清在将记录保存到数据库后,get_success_url'不会调用。并且它发出错误,因为视图business.views.BusinessCreate没有返回HttpResponse对象。它返回None。 –
'get_success_url'被默认的'form_valid'的实现所调用,它已被覆盖。您需要从该方法返回重定向,例如'return redirect(self.get_success_url())'。请注意,'messages.success'调用不应该在该方法中。 –