【问题标题】:Django admin shows models name with extra "s" at the endDjango 管理员在末尾显示带有额外“s”的模型名称
【发布时间】:2021-06-04 23:35:11
【问题描述】:

我是 Django 新手。在管理面板中,模型的名称末尾有一个额外的“s”。我该如何解决?

【问题讨论】:

    标签: django django-models django-admin


    【解决方案1】:

    为您的模型添加一个元类并设置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'
    

    好读: https://simpleisbetterthancomplex.com/tips/2018/02/10/django-tip-22-designing-better-models.html#:~:text=Always%20name%20your%20models%20using,not%20a%20collection%20of%20companies.

    【讨论】:

    • 感谢您的帮助。
    【解决方案2】:

    django-admin 为什么要加一个's'

    在 Django 中有一个命名约定,模型以单数命名。所以你的类应该命名为:

    class Comment(models.Model):
       ...
    
    class Note(models.Model):
       ...
    

    这种类的一个实例代表一个注释,而不是一组 cmets。同样考虑以下

    # doesn't really make sense
    Comments.objects.get(...)
    
    # reads much better
    Comment.objects.get(...) #e.g. get from the comment objects
    

    这是 Django 管理员希望你的类以单数命名的约定。出于这个原因,Django 添加一个“s”作为复数类名的标准方式。 (诚​​然,这不适用于所有单词,并且非常以英语为中心,但作为替代,Django 提供了verbose_name_plural 元属性)。

    如何解决:

    重命名你的类,使它们是单数的。这将使您的代码对任何习惯阅读 django 的人来说更具可读性。它还将使您的模型以与其他第三方包一致的方式命名。如果你的类名不是英文的,或者不是简单地通过附加一个 s 来复数,请使用verbose_name_plural 例如:

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

    【讨论】:

    • 谢谢,帮了大忙。
    猜你喜欢
    • 1970-01-01
    • 2014-09-21
    • 2014-09-08
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多