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: 设置指定的字段

猜你喜欢

转载自www.cnblogs.com/haiyan123/p/9178979.html
今日推荐