2

私のmodels.pyで

 class Alert(models.Model):

    user = models.CharField(max_length=30, blank=True)
    a = models.IntegerField(blank=True)
    def __unicode__(self):
        return "'%s' at %s" % (self.user)

私のforms.pyで:

 class AlertForm(forms.ModelForm):
    class Meta:
        model=Alert
        fields = ('a','user')
        widgets = {
            'user': forms.HiddenInput()
        }

AlertCountFormset = modelformset_factory(Alert,
                                        form = AlertForm)

私のviews.pyで:

def profile_setting(request, slug):
if request.method == 'GET':
    form = AlertForm(request.POST)
    if form.is_valid():
        alert_form = form.save(commit=False)
        alert_form.user = request.user.username
        alert_form.save() # Here i am getting the error
        return HttpResponseRedirect('/user/list')

extra_context = {
    'form': AlertForm()
}
return direct_to_template(request,'users/profile_setting.html',
                          extra_context)

私はDjangoモデルフォームに記入しようとしていますerrorが、コメントを入れた場所をたどっています:

events_alertcount.a may not be NULL

これは何ですか?null=Trueをフィールドに入れた後でもa、同じエラーが表示されます。それは私の何かが間違っていforms.py or models.pyますか?

4

3 に答える 3

3

これは、データベース レベルでも適用されます。フィールドをNULLにできるように、データベースの「a」列を設定します。これで修正されるはずです。HTH。

于 2012-06-29T11:53:48.757 に答える
3

これを試して:

a = models.IntegerField(blank=True, null=True)

もう一度syncdbを呼び出す必要があります

于 2012-06-29T11:56:39.120 に答える
2

モデル フィールドを定義する場合、blankオプションは検証関連です。つまり、blanktrue に設定すると、そのフィールドが入力されていなくても検証は失敗しません。

blank検証関連です。フィールドに がある場合、blank=TrueDjango の管理サイトでの検証により、空の値の入力が許可されます。フィールドに がある場合blank=False、そのフィールドは必須になります。

ただし、検証が失敗せず、モデルを保存すると、フィールドはデータベースに永続化されます。現在、オプションを trueに設定しない限り、フィールドをnullデータベースに含めることはできません。null

nullは純粋にデータベース関連であり、空白は検証関連です。

そうは言っても、nullオプションをに追加することでエラーを修正できますAlert.a

a = models.IntegerField(blank=True, null=True)

ここで、既にコマンドを実行している場合は、この変更を反映させるためにsyncdb、テーブルを削除してから再実行する必要があります。syncdbこのデータベースが本番データベースであり、これができない場合は、スキーマとデータを移行する方法についてdjango-southを調べてください。

于 2012-06-30T21:13:45.097 に答える