【问题标题】:What is exactly Meta in Django什么是 Django 中的 Meta
【发布时间】:2019-12-06 01:44:15
【问题描述】:

我想简单地知道什么是 django 中的 Meta 类以及它们的作用

from django.db import models

Class Author(models.Model):
    first_name=models.CharField(max_length=20)
    last_name=models.CharField(max_length=20)

    class Meta:
        ordering=['last_name','first_name']

【问题讨论】:

  • 元类是 python 特性,不是 django 特性,但 django 使用它们。这将有所帮助:realpython.com/python-metaclasses
  • @DovRine:这不是 metaclass,因为元类是通过继承机制实现的(即Author(models.Model, metaclass=...)
  • @WillemVanOnsem:你是对的。我发现这对我有帮助。也许你也是:stackoverflow.com/questions/10344197/…
  • 您似乎没有检查documentation。它们只是一种指定模型应该如何表现的标准选项的方法。它们与 Python 元类无关(尽管这是一个可以理解的混淆,我第一次学习 Python 和 Django 时也有这种混淆)。

标签: python django web metadata


【解决方案1】:

你问的是两个不同的问题:

  1. MetaDjango 模型中的内部类

    这只是一个类容器,带有一些附加到模型的选项(元数据)。它定义了诸如可用权限、关联数据库表名、模型是否抽象、名称的单复数版本等内容。

    简短的解释在这里:Django docs: Models: Meta options

    可用元选项列表在这里:Django docs: Model Meta options

从这里复制,考虑喜欢: How does Django's Meta class work?

Read this for further understanding

【讨论】:

    【解决方案2】:

    Meta 是一个源自古希腊语的词,意思是“meta 用于描述自我反思或自我参照的事物。”。特定于 Django,它是一个类,您可以在其中描述模型的某些方面。例如,默认情况下记录应如何排序,该模型的数据库表的名称是什么等。

    meta options [Django-doc] 上的文档说:

    模型元数据是“任何不是字段的东西”,例如排序选项 (ordering)、数据库表名称 (db_table) 或人类可读的单复数名称(verbose_nameverbose_name_plural) .都不是必需的,将Meta 类添加到模型中是完全可选的。

    Django 文档包含一个exhaustive list of Django's model Meta options。例如ordering attribute [Django-doc]:

    对象的默认排序,在获取对象列表时使用。 (...)

    这里的ordering 指定如果你查询Author 对象,比如Author.objects.all(),那么如果你没有指定任何排序,Django 将首先按last_name 排序Authors,然后在领带的情况,按first_name订购。

    【讨论】:

      猜你喜欢
      • 2020-12-29
      • 2011-01-01
      • 2011-05-30
      • 2010-09-09
      • 2015-07-07
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 2010-10-29
      相关资源
      最近更新 更多