django 模型

目录

一,模型

1,所有模型的字段类型

2,模型字段属性

二, 增删改查方法  官方文档

三,字段查找


一,模型

1,所有模型的字段类型

__all__ = [
    'AutoField', 'BLANK_CHOICE_DASH', 'BigAutoField', 'BigIntegerField',
    'BinaryField', 'BooleanField', 'CharField', 'CommaSeparatedIntegerField',
    'DateField', 'DateTimeField', 'DecimalField', 'DurationField',
    'EmailField', 'Empty', 'Field', 'FilePathField', 'FloatField',
    'GenericIPAddressField', 'IPAddressField', 'IntegerField', 'NOT_PROVIDED',
    'NullBooleanField', 'PositiveBigIntegerField', 'PositiveIntegerField',
    'PositiveSmallIntegerField', 'SlugField', 'SmallAutoField',
    'SmallIntegerField', 'TextField', 'TimeField', 'URLField', 'UUIDField',
]

2,模型字段属性

max_length :  字段长度限制

null  :  可选值为 True, False  字段是否为空 null。此字段与数据库相关

bland :  可选值为 True, False  表单验证时此字段是否可以不填。此字段与验证相关

choices  :  可迭代(例如,列表或元组),用作该字段的选择。如果指定了此选项,则默认表单窗口小部件将是一个选择框,而不是标准文本字段,并将选择范围限制为给定的选项。

default  :  字段的默认值

help_text  :  字段备注,字段帮助文档。admin后台会显示文案提示

primary_key  :  是否为主键

unique  :  字段是否唯一

verbose_name  :  后台显示的字段名称

ForeignKey 字段 属性

creater = models.ForeignKey(to=DemandUser, related_name="DemandList_creater", related_query_name="user_name",
                            on_delete=models.CASCADE, help_text="创建人", verbose_name="创建人")

to : 模型类, 外键关联的其他模型类名称

related_name : 

related_query_name : 

on_delete=models.CASCADE :级联删除:删除时也删除关联其他表的信息   ;DO_NOTHING:不采取行动;PROTECT:通过引发ProtectedError的子类来 防止删除引用的对象 django.db.IntegrityError。;RESTRICT:通过引发RestrictedError(的子类 django.db.IntegrityError)防止删除引用的对象 。不同于PROTECT,如果引用的对象还引用了在同一操作中通过CASCADE 关系删除的另一个对象,则允许删除该对象。

auto_now_add  : 第一次创建的时间,默认为False, 设置为True以后该字段不会被更改

auto_now  : 默认为False, 设为True后, 每次修改该字段,自动更新该字段时间

3 , Model的Meta选项

class User(AbstractUser):
    username = models.CharField(max_length=15, verbose_name="用户名", unique=True)
    class Meta:
        db_table = "auth_user"
        verbose_name = "用户"
        verbose_name_plural = verbose_name

db_table  : 指定model类在数据库内的表名

ordering = ['-order_date']  :对象的默认顺序,用于在获取对象列表时使用:

get_latest_by : 一个字段的名称或字段名称的模型的列表 get_latest_by = ['-priority', 'order_date']  # 根据priority倒叙,根据order_date 正旭排列
permissions = [('can_deliver_pizzas', 'Can deliver pizzas')]  # 创建此对象时,要在权限表中输入额外的权限。将为每个模型自动创建添加,更改,删除和查看权限

default_permissions  : 您可以自定义此列表,例如,如果您的应用不需要任何默认权限,可以将其设置为空列表。在创建模型之前,必须在模型上指定它,以防止创建任何遗漏的权限。('add', 'change', 'delete', 'view')

verbose_name  : 该对象的人类可读名称(单数)

verbose_name_plural: 该对象的人类可读名称(复数) 如果未指定,Django将使用verbose_name"s"

关于Meta 的官方文档:https://docs.djangoproject.com/en/3.2/ref/models/options/

二, 增删改查方法  官方文档

filter()  

get()

order_by()

reverse()

distinct(* fields)

values* fields** expressions

values_list* fieldsflat = Falsenamed = False

datesfieldkindorder ='ASC'  

>>> Entry.objects.dates('pub_date', 'year')
[datetime.date(2005, 1, 1)]
>>> Entry.objects.dates('pub_date', 'month')
[datetime.date(2005, 2, 1), datetime.date(2005, 3, 1)]
>>> Entry.objects.dates('pub_date', 'day')

datetimesfield_namekindorder ='ASC'tzinfo = None)   kind应该是"year""month""day""hour", "minute""second"

annotate* args** kwargs)  #  聚合查询  sum(), max(), min(), avg(),count()

>>> from django.db.models import Count
>>> q = Blog.objects.annotate(Count('entry'))

all()

union* other_qsall = False

>>> qs1 = Author.objects.values_list('name')
>>> qs2 = Entry.objects.values_list('headline')
>>> qs1.union(qs2).order_by('name')

intersection()

difference* other_qs

extraselect = Nonewhere = Noneparams = None表= Noneorder_by = Noneselect_params = None

>>> qs.extra(
...     select={'val': "select col from sometable where othercol = %s"},
...     select_params=(someparam,),
... )
等效于:

>>> qs.annotate(val=RawSQL("select col from sometable where othercol = %s", (someparam,)))

only* fields)  # 只根据某一个字段查询

defer* fields)# 不根据某些字段查询  与only() 相反

select_for_updatenowait = Falseskip_locked = Falseof =())  # 锁定查询,查询时会锁定数据

rawraw_queryparams = Nonetranslations = None)  # 进行原始sql查询

get()

create** kwargs

get_or_create默认值= None** kwargs)  # 有则返回,无则创建.返回objects 和 created 。 created为True时,说明是新建

update_or_create默认值= None** kwargs)# 有则更新,无则创建.返回objects 和 created 。 created为True时,说明是新建

count()

latest* fields) # 根据给定的字段返回表中的最新对象。

earliest* fields)# 与lastes()除方向改变外,其他操作方式相同。

first()

last()

aggregate* args** kwargs) # 返回在上计算出的合计值(平均值,总和等)

>>> from django.db.models import Count
>>> q = Blog.objects.aggregate(Count('entry'))
{'entry__count': 16}
通过使用关键字参数指定聚合函数,可以控制返回的聚合值的名称:

>>> q = Blog.objects.aggregate(number_of_entries=Count('entry'))
{'number_of_entries': 16}

exists()  # 判断数据是否存在

update** kwargs)  # 对指定的字段执行SQL更新查询,并返回匹配的行数(如果某些行已经具有新值,则该行数可能不等于更新的行数)。

>>> Entry.objects.filter(pub_date__year=2010).update(comments_on=False, headline='This is old')

delete()

三,字段查找

exact  # 某一字段完全符合 

Entry.objects.get(id__exact=14)
Entry.objects.get(id__exact=None)

iexact  # 不区分大小写的完全匹配

contains  # 区分大小写的匹配  等效 like %XXX%

icontains  # 不区分大小写的匹配

in  # 包含

gt  #  大于

gte  # 大于等于

lt  # 小于

lte  # 小于等于

startswith  # 区分大小写的  开头为XXX的字段

istartswith  # 不区分大小写的  开头为XXX的字段

endswith  # 区分大小写的 结尾为XXX的字段

iendswith  # 区分大小写的 结尾为XXX的字段

range  # 范围   Entry.objects.filter(pub_date__range=(start_date, end_date))  等效 SELECT ... WHERE pub_date BETWEEN '2005-01-01' and '2005-03-31';

date  # 对于日期时间字段,将值强制转换为日期。允许链接其他字段查找。取一个日期值。

year  # 对于日期和日期时间字段,精确匹配年份。允许链接其他字段查找。需要一个整数年。

month # 对于日期和日期时间字段,精确匹配月份。允许链接其他字段查找。取整数1(一月)到12(十二月)

day # 对于日期和日期时间字段,精确匹配日期。允许链接其他字段查找。需要整数天。

week  #  对于日期和日期时间字段,根据ISO-8601返回星期数(1-52或53),即,星期从星期一开始,而第一周包含年份的第一个星期四

week_day # 对于日期和日期时间字段,“星期几”匹配。允许链接其他字段查找。取一个整数值,表示从1(星期日)到7(星期六)的星期几。

time  # 对于日期时间字段,将值强制转换为时间。允许链接其他字段查找。需要一个datetime.time

Entry.objects.filter(pub_date__time=datetime.time(14, 30))
Entry.objects.filter(pub_date__time__range=(datetime.time(8), datetime.time(17)))

hour  # 对于日期时间和时间字段,精确的小时匹配。允许链接其他字段查找。取0到23之间的整数。

例子:

Event.objects.filter(timestamp__hour=23)
Event.objects.filter(time__hour=5)
Event.objects.filter(timestamp__hour__gte=12)

minute  # 对于日期时间和时间字段,精确匹配分钟。允许链接其他字段查找。取0到59之间的整数。

second  # 对于日期时间和时间字段,精确匹配第二个。允许链接其他字段查找。取0到59之间的整数

isnull # 采用任一TrueFalse,其对应于SQL查询的 和分别。IS NULL ,IS NOT NULL

regex # 区分大小写的正则表达式匹配。

iregex # 不区分大小写的正则表达式匹配。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值