当我导航到特定模型的管理界面(整个表格视图),然后点击“保存”时,这个错误就出现在通常的红色横幅上:
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保持为唯一的可编辑类型,我可以非常轻松地使其工作。但是,经过一些试验和错误,我才发现了这一点。我想知道:
调试这些管理面板-ORM的django方式是什么? 未来的问题
为什么它首先失败了?
答案 0 :(得分:0)
注意:
list_editable
与其他几个选项互动 特殊方式;你应该注意以下规则:
list_editable
中的任何字段也必须位于list_display
中。您无法编辑未显示的字段!- 同一字段无法同时列在
list_editable
和list_display_links
中 - 字段不能同时包含表单和链接。如果这些规则中的任何一个被破坏,您将收到验证错误。
我的猜测是你违反了第二点,role_name
默认为list_display_links
的唯一成员。
要对此进行测试,请设置list_display_links = None
或创建其他字段,然后将其添加到list_display
和list_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',)