Python Django:如何在管理表单中显示外键值
如何让管理窗体在django管理窗体的下拉列表中显示外键值,而不是显示“表名对象”?我正在努力解决这个问题Python Django:如何在管理表单中显示外键值,python,django,Python,Django,如何让管理窗体在django管理窗体的下拉列表中显示外键值,而不是显示“表名对象”?我正在努力解决这个问题 以下是我的模型代码示例(两者都包含catname字段。catname在父项中为PK,在子项中为FK) 管理员看起来像: from django.contrib import admin from Library.models import Parent, Child # Register your models here. class ChildAdmin(admin.ModelAdm
以下是我的模型代码示例(两者都包含catname字段。catname在父项中为PK,在子项中为FK) 管理员看起来像:
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)
您可以覆盖
ModelAdmin
使用的表单
,甚至可以使用ModelAdmin.formfield\u覆盖
更改一个字段
阅读文档您可以覆盖
ModelAdmin
使用的表单
,甚至可以使用ModelAdmin.formfield\u覆盖更改一个字段
阅读文档管理员选择小部件正在显示相关模型的
\uuuunicode\uuuu()
方法。您可以覆盖\uuuuUnicode\uuuu()
方法来显示该键,但这可能不是最好的方法,因为它将出现在使用\uuuUnicode\uuuuuuu()
的任何地方
如果您使用的是ModelAdmin,一个选项是在ModelAdmin中定义一个可调用项,该项返回您希望看到的值,并将该可调用项添加到ModelAdmin的列表\u显示中。例如,如果您的模型是Book
,并且希望查看Author
的外键值,则可以执行以下操作:
class BookAdmin(ModelAdmin):
def author_pk(self, obj):
return self.author.pk
list_display = (
'name',
'author_pk',
)
另一个选项是使用该属性,但是这会将小部件的默认行为更改为输入,而不是选择。管理选择小部件显示相关模型的\uuuuuuUnicode\uuUnicode()
方法。您可以覆盖\uuuuUnicode\uuuu()
方法来显示该键,但这可能不是最好的方法,因为它将出现在使用\uuuUnicode\uuuuuuu()
的任何地方
如果您使用的是ModelAdmin,一个选项是在ModelAdmin中定义一个可调用项,该项返回您希望看到的值,并将该可调用项添加到ModelAdmin的列表\u显示中。例如,如果您的模型是Book
,并且希望查看Author
的外键值,则可以执行以下操作:
class BookAdmin(ModelAdmin):
def author_pk(self, obj):
return self.author.pk
list_display = (
'name',
'author_pk',
)
另一个选项是使用该属性,但是这会将小部件的默认行为更改为输入而不是选择。问题可能与允许catname中的null和空白值有关。经过一个小时的搜索,我终于明白了为什么对其他人有效的代码(除了OP)对我无效。我做了一个简单的尝试/除了:
appname/admin.py
from django.contrib import admin
from . import models
class BookAdmin(ModelAdmin):
list_display = ('name', 'date', 'andwhatnot', 'author_variable')
def author_variable(self, obj):
try:
return self.author.blankablevariable
except:
pass
admin.site.register(models.Book, BookAdmin)
希望它能帮助有同样问题的人。如果使用pass-in是不受欢迎的,我会很高兴听到的。说我是新来的是夸大其词。这个问题可能与允许catname中有空值和空值有关。经过一个小时的搜索,我终于明白了为什么对其他人有效的代码(除了OP)对我无效。我做了一个简单的尝试/除了:
appname/admin.py
from django.contrib import admin
from . import models
class BookAdmin(ModelAdmin):
list_display = ('name', 'date', 'andwhatnot', 'author_variable')
def author_variable(self, obj):
try:
return self.author.blankablevariable
except:
pass
admin.site.register(models.Book, BookAdmin)
希望它能帮助有同样问题的人。如果使用pass-in是不受欢迎的,我会很高兴听到的。说我是新来的是夸大其词。你能发布相关的模型和表单代码吗?以下是我的模型代码示例(都包含catname字段,catname在父项中是PK,在子项中是FK)。你能发布相关的模型和表单代码吗?以下是我的模型代码示例(两者都包含catname字段,catname在父项中为PK,FK在子项中为FK)。您可以发布相关的模型和表单代码吗?以下是我的模型代码示例(两者都包含catname字段,catname在父项中为PK,FK在子项中为FK)。尝试使用我的代码执行此操作,但不起作用。我提供了上面的模型和管理员示例。尝试使用我的代码执行此操作,但不起作用。我提供了上面的模型和管理员示例。尝试使用我的代码执行此操作,但不起作用。我提供了上面的模型和管理员示例。。