Django中model类的Meta选项

梦想与她 提交于 2019-12-29 19:24:52

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升序排列
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!