如何在 Django Admin 中更改 OneToOne 模型字段默认消息?

Posted

技术标签:

【中文标题】如何在 Django Admin 中更改 OneToOne 模型字段默认消息?【英文标题】:How to Change OneToOne model Field Default Message in Django Admin? 【发布时间】:2021-05-31 20:49:54 【问题描述】:

我假设有以下模型。

class Replied(BaseModel):
    reply = models.OneToOneField(Review, on_delete=models.CASCADE)
    show_reply = models.BooleanField(default=False)
    replied_by = models.ForeignKey(User, on_delete=models.CASCADE)

    class Meta:
        verbose_name = 'Reply'
        verbose_name_plural = 'Replies'

    def __str__(self):
        return self.content

当我尝试添加多个回复时,Django 管理员默认给出的错误消息如下。 Reply with this Reply already exists. 我想要这样的特定消息。

已回复此评论。

我该怎么做? 在我看来它应该在管理员中完成所以这是我的 admin.py 代码

@admin.register(Replied)
class RepliedAdmin(ModelAdmin):
    list_display = (
        'replied_by',
        'created_at')

    list_filter = ('replied_by',)

    list_display_links = ('replied_by',)

    

【问题讨论】:

为什么不把reply = ...改成review = ....?这就是您收到此消息的原因。 将我的字段更改为 reply_to 收到相同的消息 【参考方案1】:

您可以覆盖error_messages=… parameter [Django-doc] 的unique 错误消息:

class Replied(BaseModel):
    reply = models.OneToOneField(
        Review,
        on_delete=models.CASCADE,
        error_messages='unique': 'Reply to this review already exists.'
    )
    show_reply = models.BooleanField(default=False)
    replied_by = models.ForeignKey(User, on_delete=models.CASCADE)

    class Meta:
        verbose_name = 'Reply'
        verbose_name_plural = 'Replies'

    def __str__(self):
        return self.content

话虽如此,默认消息是:

,code>'unique': '%(model_name)s with this %(field_label)s 已经存在。'

所以通过设置verbose_name=… [Django-doc],这个问题也解决了,其他的所有错误信息都会适应:

class Replied(BaseModel):
    reply = models.OneToOneField(
        Review,
        on_delete=models.CASCADE,
        verbose_name='review'
    )
    show_reply = models.BooleanField(default=False)
    replied_by = models.ForeignKey(User, on_delete=models.CASCADE)

    class Meta:
        verbose_name = 'Reply'
        verbose_name_plural = 'Replies'

    def __str__(self):
        return self.content

【讨论】:

以上是关于如何在 Django Admin 中更改 OneToOne 模型字段默认消息?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django admin 中显示多个模型的更改列表?

如何在 Django Admin 中更改 OneToOne 模型字段默认消息?

在Django Admin中更改密码

Django Admin Cookbook-36如何更改下拉菜单中的ForeignKey显示文本

在 Django admin 中更改日期字段的默认小部件

如何在 django admin change_form 中更改外键字段的顺序