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