美文网首页
Models and databases 之四 Meta opt

Models and databases 之四 Meta opt

作者: 低吟浅唱1990 | 来源:发表于2017-06-10 21:21 被阅读13次

    元类选项

    abstract=False     True就表示模型是抽象基类
    app_label  应用程序表现,表示这个model是在哪个应用程序下的
    base_manager_name   model属性manager的名称
    db_table = 'music_album'    自定义数库的表名称前缀
    get_latest_by = "datefield_name"    根据时间字段datefield_name排序,latest()和earliest()方法中使用的默认字段。
    db_tablespace        当前模型所使用的数据库表空间的名字。默认值是项目设置中的DEFAULT_TABLESPACE。如果后端并不支持表空间,这个选项可以忽略。
    default_manager_name     模型默认manager的名称
    default_related_name        用于关联models之间的反查名字,默认是<model_name>_set
    get_latest_by      设置模型中有序字段
    order_with_respect_to    使得model按照给定的字段排序,通常情况下是一个外键
    ordering = ['-fieldname']    对象默认的顺序,字段前面带有'-'符号表示逆序,否则正序。排序会增加查询额外开销。
    permissions     权限  以元组的方式指定 permissions = (("can_deliver_pizzas", "Can deliver pizzas"),)
    proxy = True    它作为另一个模型的子类,将会作为一个代理模型。
    required_db_features     当前连接应该具有的数据库特性列表 ??
    unique_together    unique_together = (("driver", "restaurant"),) 设置联合唯一。unique约束。ManyToManyField不能包含在unique_together中。
    index_together    设置联合索引。
            index_together = [
                ["pub_date", "deadline"],
            ]
            方便起见,处理单一字段的集合时index_together = ["pub_date", "deadline"]
    
    verbose_name    在Admin里,个易于理解的表名称,为单数:verbose_name = "pizza"
    verbose_name_plural        在Admin里显示的表名称,为复数:verbose_name_plural = "stories",一般同verbose_name一同设置。
    

    例如

    from django.db import models
    class Ox(models.Model):
          horn_length = models.IntegerField()
          class Meta:
                ordering = ["horn_length"]
                verbose_name_plural = "oxen"
    
    • default_related_name
    from django.db import models class Foo(models.Model):
            pass
    class Bar(models.Model):
            foo = models.ForeignKey(Foo)
    class Meta:
            default_related_name = 'bars'
    >>> bar = Bar.objects.get(pk=1)
    >>> # Using model name "bar" as lookup string is deprecated. >>> Foo.objects.get(bar=bar)
    >>> # You should use default_related_name "bars".
    >>> Foo.objects.get(bars=bar)
    
    • order_with_respect_to
    from django.db import models
    class Question(models.Model): 
         text = models.TextField() 
    class Answer(models.Model):
         question = models.ForeignKey(Question,on_delete=models.CASCADE) # 外键 多对一 1个问题有多个答案。一个答案对应一个问题
         class Meta:
             order_with_respect_to = 'question'
    
    >>> question = Question.objects.get(id=1) #获取一个问题实例
    >>> question.get_answer_order()       #该问题实例的答案的返回顺序
    [1, 2, 3]
    
    >>> answer = Answer.objects.get(id=2) 
    >>> answer.get_next_in_order() <Answer: 3>
    >>> answer.get_previous_in_order() <Answer: 1>
    

    相关文章

      网友评论

          本文标题:Models and databases 之四 Meta opt

          本文链接:https://www.haomeiwen.com/subject/hcdcqxtx.html