Python 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

如何让管理窗体在django管理窗体的下拉列表中显示外键值,而不是显示“表名对象”?我正在努力解决这个问题


以下是我的模型代码示例(两者都包含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)。尝试使用我的代码执行此操作,但不起作用。我提供了上面的模型和管理员示例。尝试使用我的代码执行此操作,但不起作用。我提供了上面的模型和管理员示例。尝试使用我的代码执行此操作,但不起作用。我提供了上面的模型和管理员示例。。