我在django admin list_display
中遇到了一个奇怪的问题。每当我向list_display
添加外键时,整个更改列表视图都会变为空白,仅显示总条目数。
models.py:
class Organization(models.Model):
org_id = models.AutoField(primary_key=True)
org_name = models.CharField(max_length=288)
def __unicode__(self):
return self.org_name
class Meta:
db_table = u'organization'
class Server(models.Model):
server_id = models.AutoField(primary_key=True)
server_name = models.CharField(max_length=135,verbose_name="Server Name")
org = models.ForeignKey(Organization,verbose_name="Organization")
def __unicode__(self):
return self.server_name
class Meta:
db_table = u'server'
admin.py:
class ServerAdmin(admin.ModelAdmin):
list_display = ('server_name','org')
admin.site.register(Server,ServerAdmin)
现在我希望这段代码能够显示ChangeList View
中的组织名称,但我得到了这个:
如果我删除org
课程的list_display
中的ServerAdmin
,我就会知道:
我没有修改模板或覆盖任何ModelAdmin
方法。我正在使用Mysql(5.1.58)作为ubuntu 11.10存储库附带的数据库。
如果我能为这个问题找到帮助,我会很高兴的。提前谢谢。
答案 0 :(得分:8)
我第二次 Stefano 关于要添加null=True, blank=True
的事实。但是,我认为您只需将其添加到org_name
模型的Organization
字段中。这应该是你的方式。必须这样做是因为您已经运行inspectdb
来创建旧版数据库中的模型。并且DB中的organization
表可能存储了空字符串。因此,添加上述内容将允许管理员显示空白字段/列。
此外,您还可以尝试在不希望对模型定义进行更改的情况下使用callbacks。
答案 1 :(得分:3)
尝试将null=True, blank=True
添加到所有模型字段中。
如果行没有验证模型约束,通常django admin将静默失败(因此在列表中不显示记录)。
答案 2 :(得分:2)
请参阅:https://stackoverflow.com/a/163968/1104941
以下是否适用于您?
admin.py:
class ServerAdmin(admin.ModelAdmin):
list_display = ('server_name','org__org_name')
admin.site.register(Server,ServerAdmin)
答案 3 :(得分:1)
我遇到了类似的问题并且像这样解决了(使用你的例子):
class ServerAdmin(admin.ModelAdmin):
list_display = ('server_name', 'get_org')
def get_org(self, obj):
return obj.org.org_name
get_org.short_description = 'Org'
admin.site.register(Server,ServerAdmin)