常用字段

更多Field参数请参考官方文档:https://docs.djangoproject.com/zh-hans/2.2/ref/models/fields/

AutoField

  • 映射到数据库中是int类型,有自动增长的特性。
  • 一般在指定该字段为主键时(主键名称可自定义,非必须id),才会用到该类型。
  • 如果不指定主键,那么模型会自动生成一个叫做id的主键。

BigAutoField

  • 64位的整型,类似于AutoField。
  • 产生的数据的范围是从1-9223372036854775807。

BooleanField

  • 在数据库为tinyint类型。
  • 其在模型中接收的值是True/False
  • 如果没有指定默认值,默认值是None。

CharField

  • 在数据库层面是varchar类型,在Python层面就是普通的字符串。
  • 该类型在使用时必须要指定最大的长度,也即必须要传递max_length参数。

最大长度计算:https://www.cnblogs.com/canger/p/9850727.html

DateTimeField

  • 日期时间类型,不仅仅可以存储日期,还可以存储时间。
  • 映射到数据库中是datetime类型。
    ```python TIME_ZONE = ‘Asia/Shanghai’

from django.utils.timezone import localtime,now

  1. - auto_now:在每次保存数据时,都使用当前的时间。
  2. - 作为一个记录修改日期的字段,可以将这个属性设置为True
  3. - auto_now_add:在数据第一次被添加进去时,使用当前的时间。
  4. - 作为一个记录第一次入库的字段,可以将这个属性设置为True
  5. <a name="EmailField"></a>
  6. ### EmailField
  7. - 在数据库底层也是一个varchar类型。
  8. - 类似于CharField,在进行form表单验证时才会起作用。
  9. - 最大长度是254个字符。
  10. <a name="FileField"></a>
  11. ### FileField
  12. 用来存储文件,一般用于上传文件。
  13. <a name="ImageField"></a>
  14. ### ImageField
  15. 用来存储图片文件。
  16. <a name="FloatField"></a>
  17. ### FloatField
  18. 浮点类型,映射到数据库中是float类型。
  19. <a name="IntegerField"></a>
  20. ### IntegerField
  21. 整型。值的区间是-2147483648——2147483647
  22. <a name="BigIntegerField"></a>
  23. ### BigIntegerField
  24. 大整型。值的区间是-9223372036854775808——9223372036854775807
  25. <a name="PositiveIntegerField"></a>
  26. ### PositiveIntegerField
  27. 正整型。值的区间是0——2147483647
  28. <a name="SmallIntegerField"></a>
  29. ### SmallIntegerField
  30. 小整型。值的区间是-32768——32767
  31. <a name="PositiveSmallIntegerField"></a>
  32. ### PositiveSmallIntegerField
  33. 正小整型。值的区间是0——32767
  34. <a name="TextField"></a>
  35. ### TextField
  36. - 大量的文本类型。
  37. - 映射到数据库中是`longtext`类型。
  38. <a name="UUIDField"></a>
  39. ### UUIDField
  40. - 只能存储uuid格式的字符串。
  41. - uuid是一个32位的全球唯一的字符串,一般用来作为主键。
  42. <a name="URLField"></a>
  43. ### URLField
  44. - 类似于CharField,只不过只能用来存储url格式的字符串。
  45. - 其默认的`max_length`值是200
  46. <a name="ed5e3120"></a>
  47. ## 字段常用参数
  48. <a name="null"></a>
  49. ### null
  50. - 默认是为False。若设置为TrueDjango将会在映射表时指定该字段为空。
  51. - 在使用字符串相关的FieldCharField/TextField)时,官方推荐尽量不使用该参数,也就是保持默认值False
  52. - Django在处理字符串相关的Field时,即使这个Fieldnull=False,如果没有给该Field传值,那么Django也会使用一个空的字符串来作为默认值存储进去。
  53. - 如果想要在表单验证时允许该字符串为空,那么建议使用`blank=True`
  54. - 如果当前Field类型是`BooleanField`,那么对应的可空的字段则为`NullBooleanField`
  55. <a name="db_column"></a>
  56. ### db_column
  57. - 设置该字段在数据库中的名字,即不使用模型中的名字。
  58. - 如果没有设置这个参数,那么将会使用模型中属性的名字。
  59. <a name="default"></a>
  60. ### default
  61. - 设置默认值。可以为一个值,或者是一个函数。
  62. - 但是不支持lambda表达式,并且不支持列表/字典/集合等可变的数据结构。
  63. <a name="primary_key"></a>
  64. ### primary_key
  65. 是否为主键,默认是False
  66. <a name="unique"></a>
  67. ### unique
  68. - 在表中这个字段的值是否唯一。
  69. - 一般多用于设置手机号码/邮箱等。<br />
  70. <a name="a2d5843c"></a>
  71. ## 模型中的Meta
  72. 用于对一些模型级别的配置。
  73. - 可以在模型中定义一个类,叫做Meta。这个类可以添加一些类属性来控制模型的作用。
  74. - 其可以用`db_table`属性来指定表名,ordering对指定字段来进行排序。<br />
  75. ```python
  76. class Book(models.Model):
  77. name = models.CharField(max_length=20,null=False)
  78. desc = models.CharField(max_length=100,name='description',db_column="description1")
  79. class Meta:
  80. db_table = 'book_model'

db_table

  • 指定模型映射到数据库中的表名。
  • 如果没有指定这个参数,那么在映射时,会使用app名+模型名来作为默认的表名。

    ordering

    指定在提取数据时的排序方式。

    1. class Book(models.Model):
    2. name = models.CharField(max_length=20,null=False)
    3. desc = models.CharField(max_length=100,name='description',db_column="description1")
    4. pub_date = models.DateTimeField(auto_now_add=True)
    5. class Meta:
    6. db_table = 'book_model'
    7. ordering = ['pub_date'] # 正序
    8. ordering = ['-pub_date'] # 倒序