2015-06-13 108 views
1

當我瀏覽到管理界面的特定型號(整個表視圖),並簡單地點擊「保存」,這個錯誤是在通常的紅色橫幅彈出:調試Django管理面板蟲

Please correct the errors below. 

不用說,我實際上無法從這個視圖進行編輯,直到我嘗試並修復它。

這裏是我的類:

class RoleMapping(models.Model): 
    MIN_LENGTH, MAX_LENGTH = 3, 40 
    role_name = models.CharField(unique=True, max_length=MAX_LENGTH, validators = [ 
     MinLengthValidator(MIN_LENGTH, "Field length should be greater than {}".format(MIN_LENGTH)) 
    ]) 
    role_type = models.ForeignKey(RoleType, null=True, blank=True) 

這裏的管理界面模式。但是,翻轉一些可編輯的領域似乎使事情發生了。

class RoleMapping(admin.ModelAdmin): 
    model = RoleMapping 
    list_display = ('role_name', 'role_type',) 
    #list_editable = ('role_name', 'role_type',) # This fails 
    #list_editable = ('role_name',) # This fails 
    list_editable = ('role_type',) # This works?! 

通過將role_type保持爲唯一的可編輯類型,我可以很容易地獲得它的工作。但是,經過一些試驗和錯誤之後,我才發現這一點。我想知道:

  1. 是什麼在未來 問題調試這些種類的管理面板的ORM的Django的方式

  2. 爲什麼會它已經擺在首位失敗?

回答

0

根據the Django admin docs

注:list_editable在 特定的方式一對夫婦的其他選項進行交互;您應該注意以下規則:

  • list_editable中的任何字段也必須在list_display之內。您無法編輯未顯示的字段!
  • 相同的字段不能在list_editablelist_display_links中列出 - 一個字段不能同時是表單和鏈接。

如果這些規則中的任何一個被破壞,您將得到驗證錯誤。

我的猜測是你違反第二點,而role_name默認爲list_display_links的唯一成員。

要測試此設置,請設置list_display_links = None或創建另一個字段並將其添加到list_displaylist_display_links

編輯:

我懷疑,下面就給你想要的東西。我只是添加了id作爲list_display的第一個元素。在幕後,這增加了id而不是role_namelist_display_links,這釋放了role_name以允許list_editable

class RoleMapping(admin.ModelAdmin): 
    model = RoleMapping 
    list_display = ('id', 'role_name', 'role_type',) 
    list_editable = ('role_name', 'role_type',) 
+0

感謝您的鏈接!我不確定這適用於我的情況 - 我沒有任何list_display_links。 – mallyvai

+0

@mallyvai當你進入'RoleMapping'的管理頁面時,你是否點擊'role_name'來轉到特定記錄的詳細信息?如果是這樣,那意味着'role_name'在'list_display_links'元組中(默認情況下)。 –

+0

@mallyvai請參閱我的答案中的編輯。我已經添加了「RoleMapping」管理員的代碼,我相信這可以解決您的問題。 –