在 django admin 中使用外键访问另一个模型字段

Posted

技术标签:

【中文标题】在 django admin 中使用外键访问另一个模型字段【英文标题】:access to another model fields with foreign key in django admin 【发布时间】:2018-03-28 19:48:51 【问题描述】:

我在 django 模型中有一个联系我们的类,在 admin.py 文件中使用“user_id”外键,我想使用带有 user_id 键的 userprofile 数据,例如“name”字段,在 userprofile 模型中“user_id”是foreign_key 也是,怎么办?

在models.py中:

class Ticket(models.Model):
    user_id = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, editable=False, verbose_name="user")
    replier_id = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, related_name="replier")
    guest_name = models.CharField(max_length=50, blank=True, null=True, editable=False)
    guest_email = models.CharField(max_length=255, blank=True, null=True, editable=False)
    user_phone = models.CharField(max_length=13, blank=True, null=True, editable=False)
    subject = models.CharField(max_length=255, blank=True, null=True, editable=False)
    message = models.TextField(editable=False)
    reply = models.TextField(blank=True, null=True)
    date = models.DateTimeField(auto_now=True, editable=False)
    reply_date = models.DateTimeField(blank=True, null=True)
    user_ip = models.GenericIPAddressField(editable=False)

在 admin.py 中

class ContactUsAdmin(admin.ModelAdmin):
    actions = None
    fields = ('user_name', 'user_email', 'subject', 'date', 'message', 'user_phone', 'reply')
    list_display = ('user_name', 'user_email', 'subject', 'date', 'is_replied')
    list_filter = ('date',)
    search_fields = ['user_id__first_name', 'user_id__email', 'guest_name', 'guest_email', 'subject', 'message']
    readonly_fields = ('user_name', 'user_email', 'subject', 'date', 'message', 'user_phone', 'reply_date')

我想在 admin.py 字段中显示来自 UserProfile 类的名称

【问题讨论】:

请发布您的代码。 @Selcuk 完成... 你能澄清你的目标是什么,你的问题真的不清楚 【参考方案1】: 通过查询的问题标题。我正在鼓励如何在 django 中做到这一点:
    class Album(models.Model):
        AlbumName = models.CharField(max_length=250)
        AlbumSinger = models.CharField(max_length=250)
        AlbumGenre = models.CharField(max_length=250)
        AlbumImage = models.FileField(null=True)
        SingerImage = models.FileField(null=True)
    class Musics(models.Model):
        album = models.ForeignKey(Album, related_name='music')
        MusicName = models.CharField(max_length=250)
        MusicLength = models.CharField(max_length=250)
        MusicFile = models.FileField(null=True)

在音乐中使用外键专辑。您可以根据他们的专辑访问所有音乐。要在管理员中访问它们,只需导入类名并执行以下操作:

    admin.site.register(Album) 
    admin.site.register(Musics)

我希望它能消除你的困惑。

【讨论】:

如果歌手详细信息保存在另一个模型或表格中,如何从音乐管理文件中获取带有专辑外键的歌手字段? @farzaneh 在歌手模型中使用 Musics 外键。这将获得有关专辑或音乐或歌手的所有信息。或者你可以像我在音乐中那样在歌手模型中专辑外键。谢谢 ***.com/questions/4443190/… 在你的例子中,如果你有一个有 user_id 外键的歌手表,如果你有歌手的地址,它在 userprofile 表中,你可以得到“user_id.profile.address”它来自 userprofile 表,其中的 user_id 具有“profile”相关名称! 好吧,如果你使用 Singer 模型中的专辑作为外键会更容易。这将让您同时获得专辑、音乐和歌手!【参考方案2】:

最后我解决了,当在 userprofile 模型中,user_id 有“profile”related_name,在每个地方,使用 user_id 外键,我们有来自每个模型的所有相关字段,其中 user_id 是外键 您可以使用 dir("you user_id instance") 查看那些。 所以,通过 user_id.profile.name 我得到用户的个人资料名称,没有任何导入或更改!

【讨论】:

请提供一个最小的工作示例。否则你的答案是毫无用处的。另外,请在问题和答案中检查您的正字法。

以上是关于在 django admin 中使用外键访问另一个模型字段的主要内容,如果未能解决你的问题,请参考以下文章

django admin外键字段选择后如何关联显示另一个字段?

在搜索字段中正确使用外键引用,Django admin

django admin - 选择反向外键关系(不创建,我想添加可用)

Django admin 根据另一个字段值过滤一个外部字段

在 django admin 中链接到外键对象

Django admin禁用外键下拉但保留添加按钮旁边