【问题标题】:Django admin panel not showing related foreign key correctly - PostgresqlDjango 管理面板没有正确显示相关的外键 - Postgresql
【发布时间】:2021-08-25 18:24:32
【问题描述】:

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

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

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

同样在管理面板中,我看到 note: 字段显示相关的 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')

【问题讨论】:

    标签: django postgresql django-models django-admin


    【解决方案1】:

    这是 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)
    

    【讨论】:

    • 能否请您给我一些示例代码?而且我不知道“raw_id_fields”到底是做什么的,所以你能解释清楚一点吗?
    • 非常感谢。它有帮助。
    • 忘记注意到 (models.ModelAdmin),必须更改为 (admin.ModelAdmin)。
    • 很好,抱歉。
    猜你喜欢
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 2011-01-29
    • 1970-01-01
    相关资源
    最近更新 更多