2016-10-17 11 views
2

私のモデルのextra = 1には常に1の空欄が表示されます。新しい項目を挿入しても問題ありませんが、編集中に追加の空欄を表示したくありません。これどうやってするの? 編集時にDjango Adminが0に設定しました

は私たちのモデルはこれであるとしましょう:

class Foo(models.Model): 
    bar = models.ForeignKey(Bar, models.CASCADE, related_name='bars') 
    title = models.CharField(_('Title'), max_length=255) 
    body = models.TextField(_('Body')) 
    __str__(self): 
     return '%s' % (self.title) 

class FooInline(admin.StackedInline): 
    model = Foo 
    extra = 1 #Also shows 1 extra empty field while editing. 
       #I don't want to show if there is already a non-empty field 


class FooAdmin(admin.ModelAdmin): 
    prepopulated_fields = {'slug': ('title',)} 
    inlines = [ 
     FooInline 
    ] 

答えて

2

オーバーライド代わりに余分なクラスメンバの値を設定するget_extra方法。

使用する余分なインラインフォームの数を返します。既定では、InlineModelAdmin.extra属性 を返します。

インラインフォームの数をプログラムで確認するには、このメソッドをオーバーライドします。たとえば、これは(キーワード引数OBJとして渡された)モデルインスタンス に基づくことができる:よう

何か:

def get_extra(self, request, obj=None, **kwargs): 
    if obj.bar_set.count() : 
     return 0 
    else: 
     return 1 
+0

さらに質問を、私は複数のモデルがのは、彼らがオンになっているとしましょう持っている場合同じ管理ページ、継承する方法はありますか、これをすべてのインラインモデルにハードコードする必要がありますか? (申し訳ありませんが私はいくつかの条件を悪用した場合) – Kaan

+0

はい、独自の基本管理者を作成して拡張することができます – e4c5

関連する問題