2017-12-27 160 views
1

如何隱藏djano-admin中特定記錄的字段? 例如,如果我有一個模型如何在django-admin中隱藏特定記錄的字段?

class Book(models.Model): 
    title = models.CharField(..., null=True) 
    author = models.CharField(...) 

我想隱藏在管理面板的作者與PK記錄= 1。我找到了解決方案,

class BookAdmin(admin.ModelAdmin): 
    list_display = ("pk", "get_title_or_nothing") 

    def get_form(self, request, obj=None, **kwargs): 
     if obj.pk == "1": 
      self.exclude = ("author",) 
     form = super(BookAdmin, self).get_form(request, obj, **kwargs) 
     return form 

它工作得很好,直到我來了從pk == 1的記錄返回到其他記錄,在這種情況下,表中的所有記錄都隱藏了作者字段。

回答

2

發生這種情況的原因是因爲一旦"author"字段被附加到self.exclude後,它就會停留在那裏。

對於Django的> = 1.11:

甲更好的地方排除字段動態ModelAdmin.get_exclude。它是在Django 1.11中引入的。

def get_exclude(self, request, obj=None, **kwargs): 
    if obj and obj.pk == 1: 
     # don't modify self.exclude 
     # instead return it with the extra added field 
     return self.exclude + ('author',) 
    return self.exclude 

Django的< 1.11:

對於舊版本,你可以做這樣的事情:

class BookAdmin(...): 
    exclude = (# common excluded fields) 
    original_exclude = exclude 

def get_form(self, request, obj=None, **kwargs): 
    if obj and obj.pk == 1: 
     self.exclude += ('author',) 
    else: 
     # change it back to the original_exclude 
     # for other objects 
     self.exclude = self.original_exclude 
    form = super(BookAdmin, self).get_form(request, obj, **kwargs) 
    return form 
+0

不幸的是,我得到了一個類型錯誤:「不支持的操作數類型( s)爲+:'NoneType'和'tuple'「 – Popka

+0

@Popka在你的'ModelAdmin'類中設置'exclude =()',然後再試一次。 – xyres

+0

它的作品,非常感謝你! – Popka