如何在 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 模型字段默认消息?