如何让管理表单在django管理表单的下拉列表中显示外键值,而不是显示“table name object”?我正在努力解决这个问题。在
下面是我的模型代码示例(都包含catname字段)。catname在Parent中是PK,在Child中是FK)。在
Parent(models.Model):
catname = models.CharField(db_column='catname', primary_key=True, max_length=255, verbose_name="catname")
description = models.CharField(db_column='Description', max_length=255, blank=True, null=True)
class Meta:
managed = False
db_table = 'Parent'
verbose_name_plural = ('Parent')
#def __unicode__(self): return self.catname.catname
def __str__(self):
return '%s' % (self.catname)
class Child(models.Model):
description = models.CharField(db_column='VarDescription', max_length=255, blank=True, null=True)
cname = models.CharField(db_column='VarName', primary_key=True, max_length=255)
catname = models.ForeignKey(Parent, db_column='catname', blank=True, null=True)
def __unicode__(self):
return self.name
def child_cat(self):
return self.catname.catname
class Meta:
managed = False
db_table = 'Child'
verbose_name_plural = ('Child')
管理员看起来像:
^{pr2}$
这个问题可能与catname中允许空值和空值有关。经过一个小时的搜索,我终于明白了为什么那些对其他人都有用的代码(除了OP)对我不起作用。我做了一个简单的尝试/除了:
应用程序名/管理员py在
希望它能帮助有同样问题的人。如果使用pass-in-except是不受欢迎的-我很乐意听到。说我是新来的太夸张了。在
AdminSelect小部件正在显示相关模型的
__unicode__()
方法。您可以重写__unicode__()
方法来显示该键,但这可能不是最好的方法,因为它将出现在__unicode__()
的其他地方。在如果您使用的是ModelAdmin,一个选项是在ModelAdmin中定义一个callable,它返回您希望看到的值,并将该callable添加到ModelAdmin的
list_display
。例如,如果您的模型是Book
,并且您希望看到Author
的外键值,可以这样做:另一个选择是使用^{} 属性,但是这会将小部件的默认行为更改为输入而不是选择。在
您可以重写
ModelAdmin
使用的form
,甚至可以用ModelAdmin.formfield_overrides
更改一个字段。在阅读文档here
相关问题 更多 >
编程相关推荐