Django中的Meta到底是什么?

3

我想简单了解Django中的元类是什么以及它们的作用。

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 使用它们。这将有所帮助:https://realpython.com/python-metaclasses/ - Dov Rine
1
@DovRine:这不是一个“元类”,因为元类是通过继承机制实现的(即Author(models.Model, metaclass=...))。 - Willem Van Onsem
@WillemVanOnsem:你说得对。我找到了这个帮助我的东西。也许对你有用:https://dev59.com/umkv5IYBdhLWcg3wxz2A - Dov Rine
看起来你还没有查看文档。这些选项只是一种指定模型行为的标准选项方式。它们与Python元类无关(尽管这是一个可以理解的混淆,我在学习Python和Django时也有过这样的经历)。 - Robin Zigmond
2个回答

6

元数据是一个起源于古希腊的词汇,它的意思是"用来描述自我反思或自我引用的东西。" 在Django中,它是一个类,在这个类中你可以描述你的模型的某些方面。例如,默认情况下记录应如何排序,该模型的数据库表的名称等。

元选项 [Django-doc]的文档说:

模型元数据是“不是字段”的任何内容,例如排序选项(ordering),数据库表名(db_table)或可读的单数和复数名称(verbose_nameverbose_name_plural)。没有必要添加,将类Meta添加到模型完全是可选的。

Django文档包含一个详尽的Django模型Meta选项列表(链接1)。例如,对于ordering属性(链接2)
默认情况下,用于获取对象列表的对象排序方式。(...)
这里的ordering指定了如果查询Author对象,如Author.objects.all(),则Django将按照last_name首先排序Author,并在平局的情况下按first_name排序。

1
你正在询问两件不同的事情:
  1. Django模型中的Meta内部类

    这只是一个包含一些选项(元数据)的类容器,它定义了可用的权限、关联的数据库表名、模型是否抽象等内容。该类还定义了名称的单数和复数版本。

    简短的说明在这里:Django文档:Models:Meta选项

    可用元选项列表在此处:Django文档:Model Meta options

从这里复制,考虑点赞: Django的Meta类是如何工作的?

阅读此以进一步理解


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