2017-10-12 69 views
0

我使用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'属性。

我的考验

移动fieldsviews class后,工作正常。但我不想这样做,因为我可能在多个视图上使用此表单,因此如果需要将来需要在多个页面上进行更改。

回答

3

您的表单未被识别。这是因为您已使用form在视图中设置属性,但正确的属性为form_class

(请注意,如果你正确设置form_class,你不需要model为好。)

+0

感谢@daniel,我坚持了这个错误从去年 –

+0

1周你能帮助更多的为'高清在将记录保存到数据库后,get_success_url'不会调用。并且它发出错误,因为视图business.views.BusinessCreate没有返回HttpResponse对象。它返回None。 –

+0

'get_success_url'被默认的'form_valid'的实现所调用,它已被覆盖。您需要从该方法返回重定向,例如'return redirect(self.get_success_url())'。请注意,'messages.success'调用不应该在该方法中。 –