Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性。而可用的选项大致包含以下几类:
class UserInfo(models.Model):
username = models.CharField(max_length=32,unique=True)
class meta:
#相关选项
pass
unique_together
多个字段组合必须是唯一的。例如
unique_together = ['driver', 'restaurant']
表示数据库表中driver字段和restaurant字段值组合不能是重复的。ManyToManyField字段不能包含在unique_together中。
注意:数据库中NULL值不受唯一性约束,NULL != NULL。所以[1,NULL] !=[1,NULL]
verbose_name
模型类的易读名
verbose_name_plural
模型的复数形式是什么。若未指定则,Django 会使用 verbose_name + "s".
abstract
这个属性是定义当前的模型是不是一个抽象类。所谓抽象类是不会对应数据库表的。一般我们用它来归纳一些公共属性字段,然后继承它的子类可以继承这些字段。
Options.abstract
如果abstract = True 这个model就是一个抽象类
app_label
这个选项只在当项目中有多个应用,而你的模型不在默认的应用程序包下的models.py文件中,这时候需要指定你这个模型是属于哪个应用的。例如,app_label = 'myapp'
db_table
自定义数据库表名。
django在默认情况会使用 应用名 + '_' + 模型类名 的格式来作为数据库中表名。
order_with_repect_to
使该对象相对于给定字段可排序,一般来说order_with_respect_to值是一个外键。
当order_with_respect_to 设置之后,模型会提供两个用于设置和获取关联对象顺序的方法:get_RELATED_order() 和set_RELATED_order(),其中RELATED是小写的模型名称。例如,假设一个 Question 对象有很多相关联的Answer对象,返回的列表中含有相关联Answer对象的主键:
class Question(models.Model): text = models.TextField() # ... class Answer(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) # ... class Meta: order_with_respect_to = 'question'
question = Question.objects.get(id=1) question.get_answer_order() question.set_answer_order([3, 1, 2]) #根据列表内主键顺序返回相关对象
同时还提供了get_next_in_order() 和 get_previous_in_order() 两个方法。
注意:order_with_respect_to会在数据表中添加一个_order 字段,并且会将该字段作为排序依据字段。所以,order_with_respect_to和ordering不可同时使用。
ordering
指明Django模型对象返回的记录结果集是按照哪个字段如何排序的。
- ordering=['order_date'] # 按订单升序排列
- ordering=("id",) #按照订单id升序排列
- ordering=['-order_date'] # 按订单降序排列,-表示降序
- ordering=['?order_date'] # 随机排序,?表示随机
- ordering=['-pub_date','author'] # 以pub_date为降序,在以author升序排列