1

Pythonにモデルクラスがあるとします。

class Question(models.Model):
    title = models.CharField('Title', max_length=300)
    description = models.CharField('Description', max_length=800)
    publish_date = models.DateTimeField('Pulished Date')
    question_type = models.CharField(max_length=10)

そして、ModelFormでバインドしたいと思います。

class QuestionForm(ModelForm):
    class Meta:
        model = Question
        fields = ('title', 
              'description', 
              'publish_date', 
              'question_type')

シェルでオブジェクトを作成しようとすると、次のエラーが発生します。

>>> form = QuestionForm()
>>> from django.utils import timezone
>>> form.publish_date = timezone.now().year
>>> form.save()
IntegrityError: (1048, "Column 'publish_date' cannot be null")

私はここで何かを逃しましたか?

4

2 に答える 2

2

そうですね、フォームの目的全体を見逃してしまいました。

モデルプロパティと同じ名前のプロパティを手動で割り当てるだけでは、何も起こりません。それはフォームがどのように機能するかではありません。フォームdataは、フィールド名を値にマッピングする辞書であるパラメーターを取得することによって機能します。form.is_valid()次に、それを検証するために呼び出します。そうして初めて、あなたは電話をかけることができますform.save()

于 2013-02-16T03:05:41.083 に答える
0

フォームまたはフィールドに検証を追加する必要があります。

class Question(models.Model):
    title = models.CharField('Title', max_length=300)
    description = models.CharField('Description', max_length=800)
    publish_date = models.DateTimeField('Pulished Date', blank=False)
    question_type = models.CharField(max_length=10)

上記のスニペットでは、published_dateを使用して入力されたことを確認できますblank=False。ダニエルが指摘したようform.is_valid()に、データを保存する前に電話をかける必要もあります。

于 2013-02-16T03:27:49.773 に答える