zoukankan      html  css  js  c++  java
  • Django的元选项

    模型元选项

    1. abstract

    Options.abstract
    如果 abstract = True, 就表示模型是 抽象基类 (abstract base class).

    2. app_label

    Options.app_label

    app_label = 'myapp'
    

    3. db_table

    Options.db_table
    该模型所用的数据表的名称:

    db_table = 'music_album'
    
    • 为了遵从Oracle中30个字符的限制,以及一些常见的约定,Django会缩短表的名称,而且会把它全部转为大写。在db_table的值外面加上引号来避免这种情况:
    db_table = '"name_left_in_lowercase"'
    

    4. db_tablespace

    Options.db_tablespace
    当前模型所使用的数据库表空间 的名字。默认值是项目设置中的DEFAULT_TABLESPACE,如果它存在的话。如果后端并不支持表空间,这个选项可以忽略。

    Options.default_related_name
    这个名字会默认被用于一个关联对象到当前对象的关系。默认为 _set。

    6. get_latest_by

    Options.get_latest_by
    模型中某个可排序的字段的名称,比如DateField、DateTimeField或者IntegerField。它指定了Manager的latest()和earliest()中使用的默认字段。

    • 例如:
    get_latest_by = "order_date"
    

    7. managed

    Options.managed
    默认为True,意思是Django在migrate命令中创建合适的数据表,并且会在 flush 管理命令中移除它们。换句话说,Django会管理这些数据表的生命周期。

    8. order_with_respect_to

    Options.order_with_respect_to
    按照给定的字段把这个对象标记为”可排序的“。这一属性通常用到关联对象上面,使它在父对象中有序。比如,如果Answer和 Question相关联,一个问题有至少一个答案,并且答案的顺序非常重要,你可以这样做:

    from django.db import models
    
    class Question(models.Model):
        text = models.TextField()
        # ...
    
    class Answer(models.Model):
        question = models.ForeignKey(Question)
        # ...
    
        class Meta:
            order_with_respect_to = 'question'
    

    当order_with_respect_to 设置之后,模型会提供两个用于设置和获取关联对象顺序的方法:get_RELATED_order() 和set_RELATED_order(),其中RELATED是小写的模型名称。例如,假设一个 Question 对象有很多相关联的Answer对象,返回的列表中含有相关联Answer对象的主键:

    >>> question = Question.objects.get(id=1)
    >>> question.get_answer_order()
    [1, 2, 3]
    

    与Question对象相关联的Answer对象的顺序,可以通过传入一格包含Answer 主键的列表来设置:

    >>> question.set_answer_order([3, 1, 2])
    

    相关联的对象也有两个方法, get_next_in_order() 和get_previous_in_order(),用于按照合适的顺序访问它们。假设Answer对象按照 id来排序:

    >>> answer = Answer.objects.get(id=2)
    >>> answer.get_next_in_order()
    <Answer: 3>
    >>> answer.get_previous_in_order()
    <Answer: 1>
    

    9. ordering

    Options.ordering
    对象默认的顺序,获取一个对象的列表时使用:

    ordering = ['-order_date']
    

    它是一个字符串的列表或元组。每个字符串是一个字段名,前面带有可选的“-”前缀表示倒序。前面没有“-”的字段表示正序。使用"?"来表示随机排序。

    • 例如,要按照pub_date字段的正序排序,这样写:
    ordering = ['pub_date']
    
    • 按照pub_date字段的倒序排序,这样写:
    ordering = ['-pub_date']
    
    • 先按照pub_date的倒序排序,再按照 author 的正序排序,这样写:
    ordering = ['-pub_date', 'author']
    

    10.permissions

    Options.permissions
    设置创建对象时权限表中额外的权限。增加、删除和修改权限会自动为每个模型创建。这个例子指定了一种额外的权限,can_deliver_pizzas:

    permissions = (("can_deliver_pizzas", "Can deliver pizzas"),)
    

    它是一个包含二元组的元组或者列表,格式为 (permission_code, human_readable_permission_name)。

    11.default_permissions

    Options.default_permissions

    12.proxy

    Options.proxy
    如果proxy = True, 作为该模型子类的另一个模型会被视为代理模型。

    13. select_on_save

    Options.select_on_save

    14.unique_together

    Options.unique_together
    用来设置的不重复的字段组合:

    unique_together = (("driver", "restaurant"),)
    

    它是一个元组的元组,组合起来的时候必须是唯一的。它在Django后台中被使用,在数据库层上约束数据(比如,在 CREATE TABLE 语句中包含 UNIQUE语句)。

    • 为了方便起见,处理单一字段的集合时,unique_together 可以是一维的元组:
    unique_together = ("driver", "restaurant")
    

    ManyToManyField不能包含在unique_together中。(这意味着什么并不清楚!)如果你需要验证ManyToManyField关联的唯一性,试着使用信号或者显式的贯穿模型(explicit through model)。

    15. index_together

    Options.index_together
    用来设置带有索引的字段组合:

    index_together = [
        ["pub_date", "deadline"],
    ]
    

    为了方便起见,处理单一字段的集合时,index_together可以是一个一维的列表。

    index_together = ["pub_date", "deadline"]
    

    16.verbose_name

    Options.verbose_name
    对象的一个易于理解的名称,为单数:

    verbose_name = "pizza"
    

    17.verbose_name_plural

    Options.verbose_name_plural
    该对象复数形式的名称:

    verbose_name_plural = "stories"
    
    • 如果此项没有设置,Django 会使用 verbose_name + "s"。
  • 相关阅读:
    ASP.NET WEB API构建基于REST风格
    .net平台下深拷贝和浅拷贝
    Visual Studio 必备神器
    sql注入
    proxy
    职场人生
    JSch
    何时用继承,何时用组合
    视频码率,帧率和分辨率的联系与差别
    超过响应缓冲区限制
  • 原文地址:https://www.cnblogs.com/lygiants/p/11118390.html
Copyright © 2011-2022 走看看