zoukankan      html  css  js  c++  java
  • django 学习之model操作(想细化)

    一、Field选项

    • null=True 数据库为空
    • blank=True admin相关为空
    • choices:choices意味着静态数据的变化不会太大。
    • db_column: 用于此字段的数据库的列的名称。如果没有给出,Django将使用该字段的名称
    • db_index: 如果为True,将为此字段创建数据库索引
    • db_tablepace: 如果此字段已经编入索引,则用于此字段索引的数据库表空间的名称。
    • default: 字段的默认值(当创建新的模型实例并且为该字段提供值时使用默认值,当该字段是主键时,也会使用默认值none)
    • editable: 如果为False,该字段将不会显示在管理员或者其他任何人,在验证模型过程中他们将会被跳过, 默认为True
    • error_messages: 该error_messages参数允许你覆盖字段将引发的默认消息。传入一个字典,其中包含与之要覆盖的错误消息相匹配的密钥
    • 错误消息键包括null,blank,invalid,invalid_choice,unique,和unique_for_date。
    • htlp_text:显示额外的‘帮助’文本。即使你的字段未用于表单,对于文档也很有用。请注意,该值在自动生成的表单中不是html转义的。help_text可以包含html
      •    help_text="Please use the following format: <em>YYYY-MM-DD</em>."
    • primary_key: 如果为True,设置为主键。如果没有指定任何primary_key,Django会自动添加一个AutoField来保存主键,所以你不需要在任何字段上设置,除非你想覆盖默认的主键行为。
    • unique :如果为True,该字段在整个表格中必须是唯一的.如果unique=true ,则不需要指定db_index,因为unique意味着创建索引。
      •    在旧版本Django1.11.中,unique=True无法使用FileField。
    • unique_for_date: 将其设置为a的名称DateField或DateTimeField要求此字段对于日期字段的值是唯一的
      •  举例来说,如果你有一个字段title有 unique_for_date="pub_date",那么Django的不允许的两个记录具有相同的入口title和pub_date。
    • unique_for_month: 要求字段相对于月份是唯一的

    二、字段类型

    1、AutoField :一个IntegerField根据可用ID自动递增。你通常不需要直接使用它; 如果不另外指定,主键字段将自动添加到您的模型中。
    2、BigAutoField: 一个64位整数,很像一个AutoField不同之处在于它是保证从适合数字1到9223372036854775807。
    3、BigIntegerField: 一个64位整数,很像一个IntegerField不同之处在于它是保证从适合数字-9223372036854775808到 9223372036854775807。
    4、BinaryField: 用于存储原始二进制数据的字段,它只支持bytes。请注意,该字段的功能有限。例如,对一个BinaryField值过滤查询集是不可能的。也不可能在a BinaryField中包含一个ModelForm。
    #注意:滥用 BinaryField尽管您可能会考虑将数据存储在数据库中,但请考虑在99%的情况下这是糟糕的设计。该字段不是正确的静态文件处理的替代品。
    5、BooleanField: 真假值
    6、CharField: 一个字符串字段,用于小型到大型字符串。    
       CharField有一个额外的论证:max_length字段的最大长度
    7、TextField:对于大量的文字,请使用TextField
    8、DateField: 日期,由Python以datetime.date实例表示。有一些额外的可选参数:
      auto_now无论是你添加还是修改对象,时间为你添加或者修改的时间。
      auto_now_add为添加时的时间,更新对象时不会有变动。
    
    9、DateTimeField: 日期和时间,由Python以datetime.datetime实例表示。
    10、DecimalField: 一个固定精度的十进制数,用Python在 Decimal实例中表示。
      DecimalField.max_digits
      数字中允许的最大位数。请注意,此数字必须大于或等于decimal_places。
    
      DecimalField.decimal_places  号码一起存储的小数位数。
    
      例如,要存储999分辨率为2位小数的数字,您可以使用:
    
      models.DecimalField(..., max_digits=5, decimal_places=2)
    11、DurationField: 用于存储时间段的字段 - 由Python在Python中建模 timedelta        
    12、EmailField: 检查该值是否为有效的电子邮件地址。
    13、FileField: 文件上传字段
      class FileField(upload_to = None,max_length = 100,** options)[source] ¶
      在模型中使用FileField或ImageField(见下文)需要几个步骤:
    
      在你的设置文件中,你需要定义MEDIA_ROOT一个你想要Django存储上传文件的目录的完整路径。(对于性能,这些文件不存储在数据库中。)定义 MEDIA_URL为该目录的基本公用URL。确保该目录可由Web服务器的用户帐户写入。
      将FileField或添加ImageField到您的模型中,定义upload_to选项以指定MEDIA_ROOT用于上传文件的子目录 。
      所有将存储在数据库中的文件都是路径(相对于MEDIA_ROOT)。你很可能想使用urlDjango提供的便利属性。例如,如果你ImageField被调用 mug_shot,你可以在模板中获得图像的绝对路径 。{{ object.mug_shot.url }}
      例如,假设您MEDIA_ROOT的设置为'/home/media',并且 upload_to设置为'photos/%Y/%m/%d'。所述'%Y/%m/%d' 的部分upload_to被strftime()格式化; '%Y'是四位数的一年,'%m'是两位数的月份,'%d'是两位数的一天。如果您在2007年1月15日上传文件,它将被保存在目录中/home/media/photos/2007/01/15#使用
        settings.py
            MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
            MEDIA_URL = '/media/'
        urls.py 
            url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),
    
    14、FilePathField :仅限于文件系统上某个目录中的文件名。
    15、FilePathField.path¶
           需要。文件系统的绝对路径,从这个目录中 FilePathField选择。例如:"/home/images"。            
        FilePathField.match:可选的。作为字符串的正则表达式,FilePathField 用于过滤文件名。请注意,正则表达式将应用于基本文件名,而不是完整路径。例如:"foo.*.txt$",它将匹配一个叫做foo23.txt但不是bar.txt或的文件foo23.png。
          FilePathField(path="/home/images", match="foo.*", recursive=True)
    
    
    16、FloatField:由float实例在Python中表示的浮点数。    
    17、ImageField:继承所有的属性和方法FileField,但也验证上传的对象是有效的图像。
    
        除了可用于特殊属性FileField,一个ImageField也具有height和width属性。
    
        为了便于查询这些属性,ImageField有两个额外的可选参数:
    
        ImageField.height_field¶
        每次保存模型实例时将自动填充图像高度的模型字段的名称。
    
        ImageField.width_field¶
        每次保存模型实例时将使用图像宽度自动填充模型字段的名称。
    
    18、IntegerField:整型
    19、GenericIPAddressField:字符串格式的IPv4或IPv6地址(例如192.0.2.30或 2a02:42fe::4)。
    20、NullBooleanField: 像一个BooleanField,但允许NULL作为其中一个选项。
    21、PositiveIntegerField: 正整数
    22、TextField: 一个大文本字段。该字段的默认表单小部件是a Textarea。
    23、TimeField: 一段时间,由一个datetime.time实例在Python中表示。接受相同的自动填充选项DateField。
    24、URLField:A CharField代表一个URL。
      UUIDField: 用于存储通用唯一标识符的字段。使用Python的 UUID类。在PostgreSQL上使用时,它将以uuid数据类型存储 ,否则以char(32)。
    
      通用唯一标识符是AutoFieldfor的 一个很好的选择primary_key。数据库不会为您生成UUID,因此建议使用default:
      
      import uuid
      from django.db import models
    
      class MyUUIDModel(models.Model):
          id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
          # other fields
      请注意,可调用(使用括号省略)传递给default,而不是一个实例UUID。

    三、关系领域

    ForeignKey:一对多
      classForeignKey(to,on_delete,** options)
      on_delete对应的值:
        CASCADE:级联删除,Django模拟SQL约束ON DELETE CASCADE的行为,并删除包含ForeignKey的对象。
        limit_choices_to: 设置指定的字段

  • 相关阅读:
    理解闭包Closure
    理解商集
    理解格
    理解距(数学)
    微积分英文词汇,高数名词中英文对照,高等数学术语英语翻译一览
    对Extjs中store的多种操作
    mysql中的除法取整
    【python】用asq实现count(distinct cln)
    Timer 和TimerTask的使用
    使用vim.rc配置vim
  • 原文地址:https://www.cnblogs.com/haiyan123/p/9178979.html
Copyright © 2011-2022 走看看