关于python:Django admin列表显示+ ForeignKey =空更改列表

Django admin List Display + ForeignKey = Empty Change List

我在Django管理公司list_display遇到了一个奇怪的问题。每当我向list_display添加一个外键时,整个变更列表视图都变为空白,只显示条目总数。

型号.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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'

管理人员:

1
2
3
class ServerAdmin(admin.ModelAdmin):
    list_display = ('server_name','org')
admin.site.register(Server,ServerAdmin)

现在,我希望此代码在ChangeList View中显示组织名称,但我得到了:

empty changelist :(

如果我把ServerAdmin类的list_display中的org去掉,我得到:

氧化镁

我没有修改模板或重写任何ModelAdmin方法。我使用MySQL(5.1.58)作为Ubuntu11.10存储库附带的数据库。

如果我能帮这个问题的人洗个澡,我会很高兴的。事先谢谢。


我对斯特凡诺的第二个观点是,要添加null=True, blank=True。但是,我认为您只需要将它添加到Organization模型的org_name字段中。那应该能让你通过。必须这样做,因为您已经运行了inspectdb来从遗留数据库创建模型。数据库中的Organization表可能存储了一个空字符串。因此,添加上述内容将允许管理员显示空白字段/列。

此外,您还可以尝试在不想像上面那样更改模型定义的情况下使用回调。


尝试将null=True, blank=True添加到所有模型字段中。

通常,如果行不验证模型约束,django管理将很小地失败(因此在列表中不显示任何记录)。


请参阅:https://stackoverflow.com/a/163968/1104941

以下内容对您有用吗?

管理人员:

1
2
3
class ServerAdmin(admin.ModelAdmin):
    list_display = ('server_name','org__org_name')
admin.site.register(Server,ServerAdmin)


我有一个类似的问题,并像这样解决了它(使用您的示例):

1
2
3
4
5
6
7
8
9
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)