2011-12-22 7 views
2

私はカスタム検証の管理フォームを持っています。フォームフィールドのいくつかはlist_editableを介してリストビューに表示されます。リストビューでこれらのフィールドを変更すると、カスタム検証が実行されません。ただし、通常の変更フォームを使用すると機能します。したがって、問題は "change_list"ページを介して行われた変更をどのように検証するかです。adminのlist_editableフィールドのカスタム検証

コードが

class ProjectForm(ModelForm): 
    class Meta: 
     model = Project 
    def clean(self): 
     print "validating!" 
     data = self.cleaned_data 
     if data.get('on_frontpage') and not data.get('frontpage_image'): 
      raise ValidationError('To put a project on the frontpage you must \ 
           specify a "Frontpage image" first.') 
     return data 

class ProjectAdmin(AdminImageMixin, DisplayableAdmin, SortableAdmin): 
    form = ProjectForm 
    ... 
    list_editable = ("status", "on_frontpage",) 
    list_display = ("title", "status", "on_frontpage") 

おかげで、それが明確になるかもしれません!

+0

これに関するアップデートはありますか? – fastmultiplication

+0

あなたのコメントは1ヶ月前からのものですが、私はこの質問にちょうど答えました。 –

答えて

4
+0

どういう意味ですか?あなたは例を挙げることができますか? – sha256

+1

最初に正しい行に移動するためのリンクを編集しました。私は1年以上でジャンゴをやっていないので、少し錆びています。しかし、フィールドをフォームにマップする2つの関数は、 "get_changelist_form"と "get_changelist_formset"です。彼らはデフォルトでジェネリックフォームを返します。あなたはおそらく自分のフォームに代わるためにそれらを混乱させることができます。 –

+0

お返事ありがとう、私はそれを後で見つけましたが、忘れてしまいました – sha256

0

オーバーライドModelAdmin.get_changelist_formset(request, **kwargs)方法:詳細については

from django.forms import BaseModelFormSet 

class MyAdminFormSet(BaseModelFormSet): 
    pass 

class MyModelAdmin(admin.ModelAdmin): 
    def get_changelist_formset(self, request, **kwargs): 
     kwargs['formset'] = MyAdminFormSet 
     return super().get_changelist_formset(request, **kwargs) 

Django admin site documentationを確認してください一つはModelAdminの中でオーバーライド「get_changelist_formset」の方法で「change_list」ページで使用される形式を指定することができます。

関連する問題