2017-10-12 25 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'調用不應該在該方法中。 –