0

「インスタンス」パラメーターでオブジェクトを初期化しようとしていますが、フォームに入りません。これは必須であるため、is_valid は失敗します。誰かがアドバイスしてもらえますか、私はそれが簡単な間違いだと確信していますが、それを見つけることはできません.

形:

from django.forms import ModelForm

from tagging.forms import TagField

class BusinessEditForm(ModelForm):
tags = TagField()

class Meta:
    model = Business
    exclude = ('owner', 'pub_date')

views.py のロジック

if businessid:
    b = Business.objects.get(id=businessid)
    category = b.category
    assert(b.owner == request.user) or request.user.is_staff
    #form = forms.BusinessEditForm(request.POST, instance=b)
else:
    assert category.is_public or request.user.is_staff
    b = Business(owner=request.user, category_id=category.id)
    # form = forms.BusinessEditForm(request.POST, instance=b)
    isNew = True

if request.method == "POST":
    form = forms.BusinessEditForm(request.POST, instance=b)

    if form.is_valid():

この最後の行は False に検証されます。

どんな助けでも大歓迎です。

ありがとう、イゴール

4

3 に答える 3

0

ビューを乱雑にすることなく、フォームの clean メソッドに書き込むことができます:

def clean(self):
  self.cleaned_data.update(excluded_field=self.instance.excluded_field)
  return super(YourForm, self).clean()

ただし、フォーム __init__ メソッドで、インスタンスが指定され、除外されたフィールドが設定されていることも要求する必要があります。

于 2012-02-23T15:30:54.030 に答える
0

instanceフォームデータの一部であるかのようにフォームに渡す必要がある場合は、次のようなことを試すことができます。

if request.method == "POST":
    form_data = request.POST.copy()
    form_data['instance'] = b
    form = forms.BusinessEditForm(form_data)
于 2012-01-16T08:52:26.423 に答える
0

フォームで必須フィールドを除外する場合は、呼び出す前にプログラムで設定する必要があります。そうis_valid()しないと、フォームは有効なBusinessオブジェクトを作成しないためです。is_valid()これがが戻ってくる理由ですFalse

于 2012-01-16T16:16:18.910 に答える