如何让管理表单在django管理表单的下拉列表中显示外键值,而不是显示表名对象'?我正在努力解决这个问题。
以下是我的模型代码示例(两者都包含catname字段.catname是父级的PK,而子级是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')
管理员看起来像:
from django.contrib import admin
from Library.models import Parent, Child
# Register your models here.
class ChildAdmin(admin.ModelAdmin):
list_display = ('cname','description','child_cat')
fields=('cname','description','child_cat')
search_fields = ('cname','description')
ordering = ('cname',)
admin.site.register(Child,ChildAdmin)
答案 0 :(得分:0)
您可以覆盖form
使用的ModelAdmin
,或者甚至只使用ModelAdmin.formfield_overrides
更改一个字段。
阅读文档here
答案 1 :(得分:0)
admin select小部件显示相关模型的__unicode__()
方法。您可以覆盖__unicode__()
方法来显示密钥,但这可能不是最佳方式,因为它会出现在其他地方使用__unicode__()
。
如果您使用的是ModelAdmin,一个选项是在ModelAdmin中定义一个callable,它返回您想要查看的值,并将该callable添加到ModelAdmin的list_display
。例如,如果您的模型为Book
,并且您希望查看Author
的外键值,则可以执行以下操作:
class BookAdmin(ModelAdmin):
def author_pk(self, obj):
return self.author.pk
list_display = (
'name',
'author_pk',
)
另一种选择是使用ModelAdmin.raw_id_fields
属性,但这会将窗口小部件的默认行为更改为输入而不是选择。
答案 2 :(得分:0)
问题可能与允许catname中的null和空值有关。经过一个小时的搜索,我终于明白了为什么那些适用于其他人(但OP)的代码对我来说并不起作用。我通过一个简单的尝试/除了:
来解决它应用程序名称/ admin.py
Dim startPoint As Point = New Point(12, Me.AutoScrollPosition.Y + 80)
希望能帮到遇到同样问题的人。如果使用传球,除了是不赞成的东西 - 我会很高兴听到。说我是新的是夸大其词。