Django admin列表显示+ ForeignKey =空更改列表

时间:2012-01-20 13:02:56

标签: python mysql django django-admin

我在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中的组织名称,但我得到了这个:

empty changelist :(

如果我删除org课程的list_display中的ServerAdmin,我就会知道:

change list with data :(

我没有修改模板或覆盖任何ModelAdmin方法。我正在使用Mysql(5.1.58)作为ubuntu 11.10存储库附带的数据库。

如果我能为这个问题找到帮助,我会很高兴的。提前谢谢。

4 个答案:

答案 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)