Django中model类的Meta选项

本文详细介绍了Django模型类Meta内部类的各种选项,包括unique_together、verbose_name、abstract、app_label、db_table、order_with_respect_to、ordering等,解释了每个选项的作用及使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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升序排列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值