调试Django管理面板错误

时间:2015-06-13 00:15:10

标签: python django debugging django-models

当我导航到特定模型的管理界面(整个表格视图),然后点击“保存”时,这个错误就出现在通常的红色横幅上:

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. 为什么它首先失败了?

1 个答案:

答案 0 :(得分: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_name添加到list_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',)