2012-08-29 65 views
1

我在Django管理與表格內聯形式的特定成員刪除一個字段:Django的:如何從管理在線

class MemberAdminInline(admin.TabularInline): 
    model = Member 
    fields = ("first_name", "last_name") 
    readonly_fields = ("first_name",) 

class GroupAdmin(admin.ModelAdmin): 
    model = Group 
    fields = ("name", "description") 
    inlines = [MemberAdminInline] 

我想顯示會員的last_name條件。即

"If first_name = "Joe": don't display show field for last_name". 

其重要的真的不顯示領域,而不是隱藏它,因爲我在某些情況下,實際的工作方案(使用JS爲例), 這個字段可以包含當穿過它獲取breaked二進制數據形成。 也就是說 我想要last_name可以通過管理員編輯只爲某些first_name s。

我試過提供一個自定義的表單,用於內聯並有條件地從那裏刪除字段,或者在各個階段動態地包含readonly_fields列表中的字段,但是Django仍然總是試圖找到我想隱藏字段的字段。

的Django 1.3.1

回答

1

這似乎是Django的計算在內嵌創建時表單集的字段列表,然後formset中堅持這些領域存在。

所以,唯一的方法來克服這一點,我發現是實際忽略保存的值在需要的時候:

class MemberAdminInlineForm(forms.ModelForm): 
    def clean_last_name(self): 
     if hasattr(self, "instance"): 
      if self.instance.first_name == "Joe": 
       return self.instance.last_name 
     return self.cleaned_data["last_name"]. 

class MemberAdminInline(admin.TabularInline): 
    model = Member 
    fields = ("first_name", "last_name") 
    readonly_fields = ("first_name",) 
    form = MemberAdminInlineForm 
+0

它不會讓我解決它,因爲它是不足夠的字符但你MemberAdminInlineForm中有一個小錯字,我甚至不擔心它是否不在代碼中。 'if self.intance.first_name ==「Joe」:'should be'if self.instance.first_name ==「Joe」:' – chucksmash

+0

固定。謝謝。 –