读官方的model_字段参考小结

一、常用的models下的类

  • AutoField 自增列设置

一个根据实际ID自动增长的IntegerField,用法nid = models.AutoField(primary_key=True)

  • BigAutoField自增列设置

一个64位整数,非常像[AutoField]除了它保证适合19223372036854775807之间的数字

  • BigIntegerField

一个64位整数,非常像[IntegerField]除了它保证适-92233720368547758089223372036854775807之间的数字

  • BooleanField true/false 字段

如果你需要设置[null]值,则使用[NullBooleanField]来代替BooleanField。如果[Field.default]没有指定的话, BooleanField 的默认值是 None

t_boolean = models.BooleanField()

只能填写True 或者 Flase,否则会报错

models.T_Boolean.objects.create(t_boolean=True)
  • CharField用来储存字符串

class CharField(*max_length=None*, ***options*)[source]
一个用来存储从小到很大各种长度的字符串的地方,如果是巨大的文本类型, 可以用TextField,注意CharField必须接收一个额外的参数max_length将在数据库层和Django表单验证中起作用, 用来限定字段的长度.它将会在渲染页面表单元素[Textarea]时候体现出来, 但是并不会在model或者数据库级别强制性的限定字段长度。 请使用[CharField]

  • TextField

class TextField(**options)
大文本字段。 该模型默认的表单组件是[Textarea],如果你在这个字段类型中使用了max_length属性,

  • URLField

class URLField(max_length=200, **options)
一个[CharField]类型的URL
这个字段默认的表单组件是一个[TextInput]

  • TimeField时间字段

class TimeField(auto_now=False, auto_now_add=False, **options)
时间字段,和Python中 datetime.time 一样。 接受与[DateField]相同的自动填充选项。
这个字段默认的表单组件是一个[TextInput]. Admin添加一些JavaScript快捷方式。

  • DateField用来储存时间格式

日期格式 YYYY-MM-DD 对应的 python 函数 datetime.date
class DateField(auto_now=False, auto_now_add=False, **options)[source]
其中auto_now 和auto_now_add 不能同时设置,需要时可以两个字段分别设置
auto_now -> 更新时,自动更新为当前时间 【变】
auto_now_add -> 创建时,自动生成时间 【不变】
注:auto_now当直接调用update更新自动更新无效,需要用save

 # obj = UserGroup.objects.filter(id=1).update(caption='CEO')
 # obj = UserGroup.objects.filter(id=1).first()
 # obj.caption = "CEO"
 # obj.save()
  • DateTimeField用来储存时间格式

日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]对应的 python 函数 datetime.datetime,参数使用同上

  • TimeField(DateTimeCheckMixin, Field)时间格式

时间格式 HH:MM[:ss[.uuuuuu]]

  • PositiveSmallIntegerField

该模型字段类似 [PositiveIntegerField] 但是只允许小于某一特定值(依据数据库类型而定)。 从032767 这个区间,对于Django所支持的所有数据库而言都是安全的。

  • SmallIntegerField-32768 至 3276

该字段值在 -32768 至 32767这个范围内对所有可支持的数据库都是安全的。

  • PositiveIntegerField 0-2147483647整数

类似 [IntegerField]( 但值必须是正数或者零(0). 从02147483647的值在Django支持的所有数据库中都是安全的。 由于向后兼容性原因,接受值0

  • IntegerField整数

一个整数。 在Django所支持的所有数据库中,从 -2147483648 到 2147483647 范围内的值是合法的

  • DecimalField保存小数的

class DecimalField(max_digits=None, decimal_places=None, **options)
两个参数
max_digits:位数总数,包括小数点后的位数。 该值必须大于等于decimal_places
decimal_places:小数点后的数字数量
保存999.99实例
models.DecimalField(..., max_digits=5, decimal_places=2)

  • FloatField保存小数

用Python的一个float 实例来表示一个浮点数.

  • EmailField在admin中使用检查邮件格式

class EmailField(max_length=254, **options)

  • FileField 上传文件字段

class FileField(upload_to=None, max_length=100, **options)
参数upload_to:该属性提供设置上传目录和文件名的方式,可以通过两种方式进行设置
使用的时候在setting.py文件中设置好相关属性

MEDIA_ROOT = os.path.join(BASE_DIR, 'upload/')
MEDIA_URL = '/upload/' #这个是在浏览器上访问该上传文件的url的前缀

设置保存格式三种方法

class MyModel(models.Model):
    # 文件将上传到MEDIA_ROOT/uploads
    upload = models.FileField(upload_to='uploads/')
class MyModel(models.Model):
    # 文件将保存到MEDIA_ROOT/uploads/2015/01/30
    upload = models.FileField(upload_to='uploads/%Y/%m/%d/')
def user_directory_path(instance, filename):
    # file will be uploaded to MEDIA_ROOT/user_/
    return 'user_{0}/{1}'.format(instance.user.id, filename)

class MyModel(models.Model):
    upload = models.FileField(upload_to=user_directory_path)

view展示

f = request.FILES.get('w')
obj = models.User.objects.create(avatar=f)
数据库中展示
  • ImageField 图片路径

同上

ImageField(FileField)
- 字符串,路径保存在数据库,文件上传到指定目录
- 参数:
upload_to = ""      上传文件的保存路径
storage = None      存储组件,默认django.core.files.storage.FileSystemStorage
width_field=None,   上传图片的高度保存的数据库字段名(字符串)
height_field=None   上传图片的宽度保存的数据库字段名(字符串)
  • FilePathField
FilePathField(Field)
- 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能
- 参数:
          path,                      文件夹路径
          match=None,                正则匹配
          recursive=False,           递归下面的文件夹
          allow_files=True,          允许文件
          allow_folders=False,       允许文件夹
  • GenericIPAddressField
  • 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
  • 参数:
    protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6"
    unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启刺功能,需要protocol="both"

二、字段选项

  • null 和 blank 属性
class Person(models.Model):
    first_name = models.CharField(max_length=30,blank=True)
    last_name = models.CharField(max_length=30,null=True)

null如果为True,Django将在数据库中将空值存储为NULL。 默认值是 False。
blank如果为True,则该字段允许为空白。 默认值是 False。
两者的区别在于当添加一个空值时,null在数据库显示为null,blank为空

    #第一种
    models.Person.objects.create(first_name="",last_name="")
    #第二种
    models.Person.objects.create()

上面的代码 所示,第一种情况两者在数据库中储存的都是空白字符,第二种分别null展示为null,blank为空白字符


读官方的model_字段参考小结_第1张图片
image.png
  • choices 内存列表法

在不会变动数据类型中的值时,可以用choice,但仅限于admin
文章链接: https://www.jianshu.com/p/225fa408b810

  • db_column 改变字段名

当不想使用默认字段事使用db_column属性
first_name = models.CharField(db_column="change_name",max_length=30,blank=True)

读官方的model_字段参考小结_第2张图片
image.png

  • db_index

如果True,将为该字段创建一个数据库索引

  • default 默认值

为字段设置默认值

  • editable

默认为TRUE,设置FLASE后字段不会出现在admin后台中

  • primary_key设置主键

若为 True, 则该字段会成为模型的主键字段,主键字段是只读的。 如果你改变了一个已存在对象上的主键并且保存的话,会创建一个新的对象,而不是覆盖旧的.

  • unique

如果为 True, 这个字段在表中必须有唯一值,primary_key=True 暗含着null=False,unique=True, 一个对象上只能拥有一个主键.

  • ForeignKey 一对多

创建两表互相关联ForeignKey('类名',to_field='字段')

from django.db import models

# Create your models here.

class  city(models.Model):
    uid = models.IntegerField(primary_key=True)
    city_name = models.CharField(max_length=20)

class useInfos(models.Model):
    username = models.CharField(max_length=20)
    password = models.CharField(max_length=26)
    #和第一个表中的uid字段相互关联
    user_city = models.ForeignKey('city',to_field='uid')
  • ManyToManyField多对多

创建一个新表

class HOST(models.Model):
    uid = models.AutoField(primary_key=True)
    host = models.CharField(max_length=32,db_index=True)
    ip = models.GenericIPAddressField(max_length=32,db_index=True)
    port = models.IntegerField()
    b = models.ForeignKey('Business',to_field = 'id')

#在其中一个已知表中,生成一个连接表名当前类名_属性名
#Application_r
class Application(models.Model):
    name = models.CharField(max_length=32)
    r = models.ManyToManyField('HOST')

创建一个中间表

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=128)

    def __str__(self):              # __unicode__ on Python 2
        return self.name

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')

    def __str__(self):              # __unicode__ on Python 2
        return self.name

class Membership(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    date_joined = models.DateField()
    invite_reason = models.CharField(max_length=64)

你可能感兴趣的:(读官方的model_字段参考小结)