web-dev-qa-db-ja.com

'fields'属性なしでModelFormMixinを使用することは禁止されています

Django 1.11を使用しています。

Formを作成し、Class based viewを使用してレコードを作成し、データベースに保存しました。

Business/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

Business/Forms.py

class BusinessForm(ModelForm):
    class Meta:
        model = Business
        fields = ['user']

Business/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のテンプレートをロードすると、次のようなエラーが発生します

'fields'属性なしでModelFormMixin(BusinessCreateの基本クラス)を使用することは禁止されています。

My Trials

fieldsviews classに移動すると、正常に動作します。しかし、私はこのフォームを複数のビューで使用している可能性があるため、そうしたくないので、必要に応じて、将来複数のページで変更する必要があります。

7
Anuj TBE

フォームが認識されていません。これは、ビューで属性を設定するためにformを使用したが、正しい属性はform_classであるためです。

form_classを正しく設定すれば、modelも必要ありません。)

9
Daniel Roseman

私にとっては、このようなフィールド変数を追加することで修正されます

model = xxxxxxxxxx fields = '__all__'

モデル名の後

これを参照してください rl