Django管理页面显示模型名称时末尾多了一个"s"

3

我刚接触Django。在管理面板中,模型名称末尾多了一个"s"。怎么解决?

enter image description here

2个回答

6
给你的模型添加一个元类,并设置verbose_name_plural(https://docs.djangoproject.com/en/3.2/ref/models/options/#verbose-name-plural)。理想情况下,将类名命名为单数形式(在这种情况下,你会拥有class Comment(models.Model))。
class Comments(models.Model):


    class Meta:
        
        verbose_name_plural = 'Comments'

好文推荐:Django Tip #22:设计更好的模型

建议在定义模型时,始终使用单数来命名模型,而不是公司的集合名称。例如,使用 "Company" 而不是 "Companies"。


谢谢你的帮助。 - niloofar

5

为什么django-admin要添加's'

Django有一个命名规则,即模型的名称使用单数形式。因此你的类应该被命名为:

class Comment(models.Model):
   ...

class Note(models.Model):
   ...

这个类的一个实例代表一个单独的评论,而不是一组评论。同样地,请考虑以下内容。
# doesn't really make sense
Comments.objects.get(...)

# reads much better
Comment.objects.get(...) #e.g. get from the comment objects

这是一个约定俗成的惯例,Django admin希望您的类名为单数。因此,Django以在类名后添加's'的方式作为标准形式来复数化您的类名(尽管这种方式并不适用于所有单词,而且非常英国中心化,但作为覆盖,Django提供了verbose_name_plural元属性)。

如何解决:

将类名重命名为单数形式。这将使您的代码更容易阅读,适合那些已经习惯于阅读Django的人。它还将使您的模型名称与其他第三方包一致。如果您的类名不是英语,或者不能简单地通过添加's'来复数化,则可以使用verbose_name_plural,例如:

Class Cactus(models.Model):
    class Meta:  
        verbose_name_plural = 'Cacti'

1
谢谢,它帮了我很大的忙。 - niloofar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接