class ArticlePost(models.Model):
字段名:小写加下划线 PS:
first_name = models.CharField(max_length=30)
每个模型都是一个 Python 的类,这些类继承
django.db.models.Model
模型类的每个属性都相当于一个数据库的字段。
每个字段都被指定为一个类属性,并且每个属性映射为一个数据库列。
Field.null
:
如果是 True, Django 将在数据库中存储空值为 NULL。默认为 False。
避免在基于字符串的字段上使用 null,如 CharField 和 TextField。这意味着它有两种可能的“无数据”值。NULL,和空字符串。
一个例外是当一个 CharField 同时设置了 unique=True 和 blank=True。在这种情况下,null=True 是需要的,以避免在保存具有空白值的多个对象时违反唯一约束。
无论是基于字符串的字段还是非字符串的字段,如果希望在表单中允许空值,还需要设置 blank=True,因为 null 参数只影响数据库的存储。
blank
Field.blank
:
如果是 True ,该字段允许为空。默认为 False 。
blank=True,表单验证将允许输入一个空值。如果一个字段有 blank=False,则该字段为必填字段。
choices
见choices
见枚举类型
default
Field.default
:
该字段的默认值。可以是一个值或者是个可调用的对象,如果是个可调用对象,每次实例化模型时都会调用该对象。
默认值不能是一个可更改的对象(模型实例、list、set 等),因为对该对象同一实例的引用将被用作所有新模型实例的缺省值。相反,将所需的默认值包裹在一个可调用对象中。
例:为 JSONField 指定一个默认的 dict,使用一个函数:
def contact_default():
return {"email": "to1@example.com"}
contact_info = JSONField("ContactInfo", default=contact_default)
primary_key
Field.primary_key
如果设置为 True ,将该字段设置为该模型的主键。
不需要为你的任何字段设置 primary_key=True。
如果你没有为模型中的任何字段指定 primary_key=True,Django 会自动添加一个 AutoField 来保存主键。
primary_key=True 意味着 null=False 和 unique=True。一个对象只允许有一个主键。
主键字段是只读的。如果您改变了现有对象的主键值,然后将其保存,则会在旧对象旁边创建一个新对象。
unique
Field.unique:
如果设置为 True,这个字段必须在整个表中保持值唯一。
字段备注名
除了 ForeignKey
, ManyToManyField
和 OneToOneField
,任何字段类型都接收一个可选的位置参数 verbose_name
,如果未指定该参数值, Django 会自动使用字段的属性名作为该参数值,并且把下划线转换为空格。
在该例中:备注名为 "person's first name
":
first_name = models.CharField("person's first name", max_length=30)
在该例中:备注名为 "first name
":
first_name = models.CharField(max_length=30)
ForeignKey
, ManyToManyField
and OneToOneField
接收的第一个参数为模型的类名,后面可以添加一个 verbose_name
参数:
poll = models.ForeignKey(
Poll,
on_delete=models.CASCADE,
verbose_name="the related poll",
sites = models.ManyToManyField(Site, verbose_name="list of sites")
place = models.OneToOneField(
Place,
on_delete=models.CASCADE,
verbose_name="related place",
惯例是不将 verbose_name 的首字母大写,必要时 Djanog 会自动把首字母转换为大写。
AutoField
class AutoField(**options)¶
: 一个 IntegerField,根据可用的 ID 自动递增。你通常不需要直接使用它;如果你没有指定,主键字段会自动添加到你的模型中。
BooleanField
class BooleanField(**options)
: 一个 true/false 字段。
默认表单部件: CheckboxInput
,或者如果 null=True 则是 NullBooleanSelect。
当 Field.default 没有定义时,BooleanField 的默认值是 None。
CharField
class CharField(max_length=None, **options)
: 一个字符串字段,适用于小到大的字符串。
对于大量的文本,使用 TextField。
默认表单部件 : TextInput
。
CharField 有一个额外的必要参数。
CharField.max_length
字段的最大长度(以字符为单位)。max_length 是在数据库层和 Django 的验证中使用 MaxLengthValidator 强制执行的。
DateField
class DateField(auto_now=False, auto_now_add=False, **options)
: 一个日期,在 Python 中用一个 datetime.date 实例表示。有一些额外的、可选的参数。
DateField.auto_now
每次保存对象时,自动将该字段设置为现在。 对于“最后修改”的时间戳很有用。请注意,当前日期 总是 被使用,而不仅仅是一个你可以覆盖的默认值。
只有在调用 Model.save() 时,该字段才会自动更新。当以其他方式对其他字段进行更新时,如 QuerySet.update(),该字段不会被更新,尽管你可以在这样的更新中为该字段指定一个自定义值。
DateField.auto_now_add
当第一次创建对象时,自动将该字段设置为现在。对创建时间戳很有用。请注意,当前日期是 始终 使用的;它不仅仅是一个你可以覆盖的默认值。因此,即使你在创建对象时为该字段设置了一个值,它也会被忽略。如果你想修改这个字段,可以设置以下内容来代替 auto_now_add=True :
对于 DateField: default=date.today ——来自 datetime.date.today()
默认表单部件 : DateInput。管理中增加了一个 JavaScript 日历,以及“今天”的快捷方式。包含一个额外的 invalid_date 错误信息键。
auto_now_add、auto_now 和 default 选项是相互排斥的。这些选项的任何组合都会导致错误。
DateTimeField
class DateTimeField(auto_now=False, auto_now_add=False, **options)
: 一个日期和时间,在 Python 中用一个 datetime.datetime
实例表示。与 DateField 一样,使用相同的额外参数。
默认表单部件 : DateTimeInput
。管理中使用两个单独的 TextInput 部件,并使用 JavaScript 快捷方式。
DecimalField
class DecimalField(max_digits=None, decimal_places=None, **options)
: 一个固定精度的十进制数,在 Python 中用一个 Decimal 实例来表示。它使用 DecimalValidator 验证输入。
有两个 必要的 参数:
DecimalField.max_digits
数字中允许的最大位数。请注意,这个数字必须大于或等于 decimal_places。
DecimalField.decimal_places
与数字一起存储的小数位数。
例如,如果要存储精度为小数点后两位的 999 的数字,你可以使用:
models.DecimalField(..., max_digits=5, decimal_places=2)
并以 10 位小数的精度来存储最多约 10 亿的数字:
models.DecimalField(..., max_digits=19, decimal_places=10)
默认表单部件是 TextInput。 (当 localize 为 False 时是 NumberInput
)
EmailField
class EmailField(max_length=254, **options)
: 一个 CharField,使用 EmailValidator 来检查该值是否为有效的电子邮件地址。
FloatField
class FloatField(**options)
: 在 Python 中用一个 float 实例表示的浮点数。
默认表单部件是 TextInput。 (当 localize 为 False 时是 NumberInput
)
IntegerField
class IntegerField(**options)
: 一个整数。从 -2147483648 到 2147483647 的值在 Django 支持的所有数据库中都是安全的。
它使用 MinValueValidator 和 MaxValueValidator 根据默认数据库支持的值来验证输入。
默认表单部件是 TextInput。 (当 localize 为 False 时是 NumberInput
)
TextField
class TextField(**options)
: 一个大的文本字段。
默认表单部件:Textarea
。
如果你指定了 max_length 属性,它将反映在自动生成的表单字段的 Textarea 部件中。但是,它并没有在模型或数据库层面被强制执行。使用一个 CharField 来实现。
TimeField
class TimeField(auto_now=False, auto_now_add=False, **options)
: 一个时间,在 Python 中用 datetime.time 实例表示。接受与 DateField 相同的自动填充选项。
默认的表单部件: TimeInput
。管理中添加了一些 JavaScript 快捷方式。
ForeignKey
class ForeignKey(to, on_delete, **options)
: 一个多对一的关系。需要两个位置参数:模型相关的类和 on_delete 选项。
要创建一个递归关系——一个与自己有多对一关系的对象——使用 models.ForeignKey('self', on_delete=models.CASCADE)。
如果你有一个可空的 ForeignKey,并且你希望当被引用的对象被删除时,它被设置为空:
user = models.ForeignKey(
User,
models.SET_NULL,
blank=True,
null=True,
复制代码