首页 > 解决方案 > Django 管理面板未正确显示相关外键 - Postgresql

问题描述

我是 Django 的新手。我已经定义了 2 个表并设置了一个外键。所以我想将表Comment中的列注释链接到表Note中的列id

当我使用 PostgreSQL 时,当我检查 psql shell 时,列note的名称将显示为note_id

因此,对于在模板中使用,如果我使用类似的东西comment.note,它会打印笔记表的“quick_note”,这是我不想要的。我想将相关帖子的“id”获取到当前评论,而不是相关帖子的 quick_note。但是如果我使用类似的东西,它会显示相关帖子的 id,这是我期望得到的。comments.note_id

在此处输入图像描述

同样在管理面板中,我看到一个注释字段:显示相关的 quick_note 而不是 id。如何解决管理面板显示相关 ID 的问题?所以在这里我希望相关帖子的 id 显示在note:前面。

在此处输入图像描述

这是我的model.py:

class Note(models.Model):
       title = models.CharField(max_length=100)
       quick_note = models.CharField(max_length=500)
       pub_date = models.DateTimeField('date published')
       author = models.CharField(max_length=100)

class Comment(models.Model):
      text = models.CharField(max_length=200)
      note = models.ForeignKey(Note, on_delete=models.CASCADE)
      pub_date = models.DateTimeField('date published')

标签: djangopostgresqldjango-modelsdjango-admin

解决方案


这是 Django 的行为,foreignKey 字段指向一个对象,而 field_id 映射到对象的主键,这在分配的情况下很重要,就像您尝试保存一样

comment.note = 1

你会得到一个例外

如果您尝试保存

comment.note_id  = note 

你也会得到例外。

关于您的管理问题,最好的解决方案是设置“raw_id_fields”,它会按照您的意愿行事,它会让您的系统更快地添加/编辑对象。

class CommentAdmin(admin.ModelAdmin):
        raw_id_fields = ['note']

try:
        admin.site.unregister(Comment)
except: pass
admin.site.register(Comment,CommentAdmin)

推荐阅读