2015-06-13 85 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”管理员的代码,我相信这可以解决您的问题。 –