相关文章推荐
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,这个字段必须在整个表中保持值唯一。

    字段备注名

    除了 ForeignKeyManyToManyFieldOneToOneField,任何字段类型都接收一个可选的位置参数 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,
    复制代码
    分类:
    代码人生
    标签:
     
    推荐文章