电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

django模型動態修改參數,增加 filter 字段的方式

瀏覽:2日期:2024-10-19 18:42:28

我就廢話不多說啦,還是直接看代碼吧!

kwargs = {# 動態查詢的字段} # 選擇deleted_datetime為空的記錄if exclude_deleted:kwargs[ ’deleted_datetime__isnull’ ] = True # 選擇特的categoryif category is not None:kwargs[ ’category’ ] = category # 特定的用戶if current_user_only:kwargs[ ’user’ ] = current_user # 根據標題查詢if title_search_query != ’’:kwargs[ ’title__icontains’ ] = title_search_query # 應用所有的查詢entries = Entry.objects.filter( **kwargs )# 打印出所有的結果檢查print entries

用這種方式,在Q object 方式下,是有問題的,要采用如下方式:

kwargs = { ’deleted_datetime__isnull’: True }args = ( Q( title__icontains = ’Foo’ ) | Q( title__icontains = ’Bar’ ) )entries = Entry.objects.filter( args, **kwargs )

補充知識:Django模型系統的常用字段和字段參數

常用字段

AutoField:int自增列,必須填入參數 primary_key=True。當model中如果沒有自增列,則自動會創建一個列名為id的列。

IntegerField:一個整數類型,范圍在 -2147483648 to 2147483647。

CharField:字符類型,必須提供max_length參數, max_length表示字符長度

DateField:日期字段,日期格式 YYYY-MM-DD,相當于Python中的datetime.date()實例。

DateTimeField:日期時間字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相當于Python中的datetime.datetime()實例。

所有字段合集

AutoField(Field) - int自增列,必須填入參數 primary_key=True BigAutoField(AutoField) - bigint自增列,必須填入參數 primary_key=True 注:當model中如果沒有自增列,則自動會創建一個列名為id的列 from django.db import models class UserInfo(models.Model): # 自動創建一個列名為id的且為自增的整數列 username = models.CharField(max_length=32) class Group(models.Model): # 自定義自增列 nid = models.AutoField(primary_key=True) name = models.CharField(max_length=32) SmallIntegerField(IntegerField): - 小整數 -32768 ~ 32767 PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) - 正小整數 0 ~ 32767 IntegerField(Field) - 整數列(有符號的) -2147483648 ~ 2147483647 PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) - 正整數 0 ~ 2147483647 BigIntegerField(IntegerField): - 長整型(有符號的) -9223372036854775808 ~ 9223372036854775807 BooleanField(Field) - 布爾值類型 NullBooleanField(Field): - 可以為空的布爾值 CharField(Field) - 字符類型 - 必須提供max_length參數, max_length表示字符長度 TextField(Field) - 文本類型 EmailField(CharField): - 字符串類型,Django Admin以及ModelForm中提供驗證機制 IPAddressField(Field) - 字符串類型,Django Admin以及ModelForm中提供驗證 IPV4 機制 GenericIPAddressField(Field) - 字符串類型,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' URLField(CharField) - 字符串類型,Django Admin以及ModelForm中提供驗證 URL SlugField(CharField) - 字符串類型,Django Admin以及ModelForm中提供驗證支持 字母、數字、下劃線、連接符(減號) CommaSeparatedIntegerField(CharField) - 字符串類型,格式必須為逗號分割的數字 UUIDField(Field) - 字符串類型,Django Admin以及ModelForm中提供對UUID格式的驗證 FilePathField(Field) - 字符串,Django Admin以及ModelForm中提供讀取文件夾下文件的功能 - 參數:path, 文件夾路徑match=None,正則匹配recursive=False, 遞歸下面的文件夾allow_files=True, 允許文件allow_folders=False, 允許文件夾 FileField(Field) - 字符串,路徑保存在數據庫,文件上傳到指定目錄 - 參數: upload_to = '' 上傳文件的保存路徑 storage = None 存儲組件,默認django.core.files.storage.FileSystemStorage ImageField(FileField) - 字符串,路徑保存在數據庫,文件上傳到指定目錄 - 參數: upload_to = '' 上傳文件的保存路徑 storage = None 存儲組件,默認django.core.files.storage.FileSystemStorage width_field=None, 上傳圖片的高度保存的數據庫字段名(字符串) height_field=None 上傳圖片的寬度保存的數據庫字段名(字符串) DateTimeField(DateField) - 日期+時間格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] DateField(DateTimeCheckMixin, Field) - 日期格式 YYYY-MM-DD TimeField(DateTimeCheckMixin, Field) - 時間格式 HH:MM[:ss[.uuuuuu]] DurationField(Field) - 長整數,時間間隔,數據庫中按照bigint存儲,ORM中獲取的值為datetime.timedelta類型 FloatField(Field) - 浮點型 DecimalField(Field) - 10進制小數 - 參數: max_digits,小數總長度 decimal_places,小數位長度 BinaryField(Field) - 二進制類型

ORM字段與數據庫實際字段的對應關系

對應關系: ’AutoField’: ’integer AUTO_INCREMENT’, ’BigAutoField’: ’bigint AUTO_INCREMENT’, ’BinaryField’: ’longblob’, ’BooleanField’: ’bool’, ’CharField’: ’varchar(%(max_length)s)’, ’CommaSeparatedIntegerField’: ’varchar(%(max_length)s)’, ’DateField’: ’date’, ’DateTimeField’: ’datetime’, ’DecimalField’: ’numeric(%(max_digits)s, %(decimal_places)s)’, ’DurationField’: ’bigint’, ’FileField’: ’varchar(%(max_length)s)’, ’FilePathField’: ’varchar(%(max_length)s)’, ’FloatField’: ’double precision’, ’IntegerField’: ’integer’, ’BigIntegerField’: ’bigint’, ’IPAddressField’: ’char(15)’, ’GenericIPAddressField’: ’char(39)’, ’NullBooleanField’: ’bool’, ’OneToOneField’: ’integer’, ’PositiveIntegerField’: ’integer UNSIGNED’, ’PositiveSmallIntegerField’: ’smallint UNSIGNED’, ’SlugField’: ’varchar(%(max_length)s)’, ’SmallIntegerField’: ’smallint’, ’TextField’: ’longtext’, ’TimeField’: ’time’, ’UUIDField’: ’char(32)’,

字段參數

null:用于表示某個字段可以為空

unique:如果設置為unique=True 則該字段在此表中必須是唯一的 。

db_index:如果db_index=True 則代表著為此字段設置數據庫索引。

default:為該字段設置默認值。

db_column:設置該屬性在數據庫表中所對應的字段名

DatetimeField、DateField、TimeField這個三個時間字段,都可以設置如下屬性。

auto_now_add:配置auto_now_add=True,創建數據記錄的時候會把當前時間添加到數據庫。

auto_now:配置上auto_now=True,每次更新數據記錄的時候會更新該字段。

其它屬性詳情請查看:官方文檔

關系字段

ForeignKey

外鍵類型在ORM中用來表示外鍵關聯關系,一般把ForeignKey字段設置在 ’一對多’中’多’的一方。ForeignKey可以和其他表做關聯關系同時也可以和自身做關聯關系。

字段參數:

- to:設置要關聯的表- to_field:設置要關聯的表的字段- related_name:反向操作時,使用的字段名,用于代替原反向查詢時的’表名_set’。 class Classes(models.Model):name = models.CharField(max_length=32) class Student(models.Model):name = models.CharField(max_length=32)theclass = models.ForeignKey(to='Classes') 當我們要查詢某個班級關聯的所有學生(反向查詢)時,我們會這么寫: models.Classes.objects.first().student_set.all() 當我們在ForeignKey字段中添加了參數 related_name 后, class Student(models.Model):name = models.CharField(max_length=32)theclass = models.ForeignKey(to='Classes', related_name='students') 當我們要查詢某個班級關聯的所有學生(反向查詢)時,我們會這么寫: models.Classes.objects.first().students.all() - related_query_name:反向查詢操作時,使用的連接前綴,用于替換表名。- on_delete:當刪除關聯表中的數據時,當前表與其關聯的行的行為。models.CASCADE:刪除關聯數據,與之關聯也刪除models.DO_NOTHING:刪除關聯數據,引發錯誤IntegrityErrormodels.PROTECT:刪除關聯數據,引發錯誤ProtectedErrormodels.SET_NULL:刪除關聯數據,與之關聯的值設置為null(前提FK字段需要設置為可空)models.SET_DEFAULT:刪除關聯數據,與之關聯的值設置為默認值(前提FK字段需要設置默認值)models.SET:刪除關聯數據,a. 與之關聯的值設置為指定值,設置:models.SET(值)b. 與之關聯的值設置為可執行對象的返回值,設置:models.SET(可執行對象)def func():return 10 class MyModel(models.Model):user = models.ForeignKey(to='User',to_field='id',on_delete=models.SET(func))- db_constraint:是否在數據庫中創建外鍵約束,默認為True。

OneToOneField

一對一字段。通常一對一字段用來擴展已有字段。

示例:

class Author(models.Model): name = models.CharField(max_length=32) info = models.OneToOneField(to=’AuthorInfo’) class AuthorInfo(models.Model): phone = models.CharField(max_length=11) email = models.EmailField()

字段參數:

to:設置要關聯的表

to_field:設置要關聯的字段。

on_delete:同ForeignKey字段。

ManyToManyField

在數據庫中通過第三張表來建立關聯關系。

字段參數:

to:設置要關聯的表

related_name:同ForeignKey字段。

related_query_name:同ForeignKey字段。

symmetrical:僅用于多對多自關聯時,指定內部是否創建反向操作的字段。默認為True。

舉個例子:

class Person(models.Model): name = models.CharField(max_length=16) friends = models.ManyToManyField('self')

此時,person對象就沒有person_set屬性。

class Person(models.Model): name = models.CharField(max_length=16) friends = models.ManyToManyField('self', symmetrical=False)

此時,person對象現在就可以使用person_set屬性進行反向查詢。

through:在使用ManyToManyField字段時,Django將自動生成一張表來管理多對多的關聯關系。但我們也可以手動創建第三張表來管理多對多關系,此時就需要通過through來指定第三張表的表名。

through_fields:設置關聯的字段。

db_table:默認創建第三張表時,數據庫中表的名稱。

創建多對多關聯關系的三種方式

方式一:自行創建第三張表

class Book(models.Model): title = models.CharField(max_length=32, verbose_name='書名') class Author(models.Model): name = models.CharField(max_length=32, verbose_name='作者姓名') # 自己創建第三張表,分別通過外鍵關聯書和作者class Author2Book(models.Model): author = models.ForeignKey(to='Author') book = models.ForeignKey(to='Book') class Meta: unique_together = ('author', 'book')

方式二:通過ManyToManyField自動創建第三張表

class Book(models.Model): title = models.CharField(max_length=32, verbose_name='書名') # 通過ORM自帶的ManyToManyField自動創建第三張表class Author(models.Model): name = models.CharField(max_length=32, verbose_name='作者姓名') books = models.ManyToManyField(to='Book', related_name='authors')

方式三:設置ManyTomanyField并指定自行創建的第三張表

class Book(models.Model): title = models.CharField(max_length=32, verbose_name='書名') # 自己創建第三張表,并通過ManyToManyField指定關聯class Author(models.Model): name = models.CharField(max_length=32, verbose_name='作者姓名') books = models.ManyToManyField(to='Book', through='Author2Book', through_fields=('author', 'book')) # through_fields接受一個2元組(’field1’,’field2’): # 其中field1是定義ManyToManyField的模型外鍵的名(author),field2是關聯目標模型(book)的外鍵名。 class Author2Book(models.Model): author = models.ForeignKey(to='Author') book = models.ForeignKey(to='Book') class Meta: unique_together = ('author', 'book')

注意:當我們需要在第三張關系表中存儲額外的字段時,就要使用第三種方式。

元信息

ORM對應的類里面包含另一個Meta類,而Meta類封裝了一些數據庫的信息。主要字段如下:

db_table: ORM在數據庫中的表名默認是 app_類名,可以通過db_table可以重寫表名。

index_together: 聯合索引

unique_together: 聯合唯一索引

ordering: 指定默認按什么字段排序。只有設置了該屬性,我們查詢到的結果才可以被reverse()。

其他屬性詳情請查看:官方文檔

以上這篇django模型動態修改參數,增加 filter 字段的方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Django
主站蜘蛛池模板: 冷藏车厂家|冷藏车价格|小型冷藏车|散装饲料车厂家|程力专用汽车股份有限公司销售十二分公司 | 苏州同创电子有限公司 - 四探针测试仪源头厂家 | 物和码官网,物和码,免费一物一码数字化营销SaaS平台 | 运动木地板厂家,篮球场木地板品牌,体育场馆木地板安装 - 欧氏运动地板 | 首页 - 张店继勇软件开发工作室 兰州UPS电源,兰州山特UPS-兰州万胜商贸 | 杭州网络公司_百度SEO优化-外贸网络推广_抖音小程序开发-杭州乐软科技有限公司 | 幂简集成 - 品种超全的API接口平台, 一站搜索、试用、集成国内外API接口 | 无线联网门锁|校园联网门锁|学校智能门锁|公租房智能门锁|保障房管理系统-KEENZY中科易安 | 冷柜风机-冰柜电机-罩极电机-外转子风机-EC直流电机厂家-杭州金久电器有限公司 | 德国BOSCH电磁阀-德国HERION电磁阀-JOUCOMATIC电磁阀|乾拓百科 | 液氮罐_液氮容器_自增压液氮罐-北京君方科仪科技发展有限公司 | 学校用栓剂模,玻璃瓶轧盖钳,小型安瓿熔封机,实验室安瓿熔封机-长沙中亚制药设备有限公司 | 工业洗衣机_工业洗涤设备_上海力净工业洗衣机厂家-洗涤设备首页 bkzzy在职研究生网 - 在职研究生招生信息咨询平台 | 塑料造粒机「厂家直销」-莱州鑫瑞迪机械有限公司 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 成都办公室装修-办公室设计-写字楼装修设计-厂房装修-四川和信建筑装饰工程有限公司 | 温州在线网| 蜂窝块状沸石分子筛-吸附脱硫分子筛-萍乡市捷龙环保科技有限公司 | 拉力测试机|材料拉伸试验机|电子拉力机价格|万能试验机厂家|苏州皖仪实验仪器有限公司 | 517瓜水果特产网|一个专注特产好物的网站 | 无纺布包装机|径向缠绕包装机|缠绕膜打包机-上海晏陵智能设备有限公司 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | R507制冷剂,R22/R152a制冷剂厂家-浙江瀚凯制冷科技有限公司 | 医学动画公司-制作3d医学动画视频-医疗医学演示动画制作-医学三维动画制作公司 | 合肥办公室装修 - 合肥工装公司 - 天思装饰 | 钢骨架轻型板_膨石轻型板_钢骨架轻型板价格_恒道新材料 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 | 广州展览制作|展台制作工厂|展览设计制作|展览展示制作|搭建制作公司 | 合肥触摸一体机_触摸查询机厂家_合肥拼接屏-安徽迅博智能科技 | 精密线材测试仪-电线电缆检测仪-苏州欣硕电子科技有限公司 | 质检报告_CE认证_FCC认证_SRRC认证_PSE认证_第三方检测机构-深圳市环测威检测技术有限公司 | 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 辐射仪|辐射检测仪|辐射巡测仪|个人剂量报警仪|表面污染检测仪|辐射报警仪|辐射防护网 | 【孔氏陶粒】建筑回填陶粒-南京/合肥/武汉/郑州/重庆/成都/杭州陶粒厂家 | 真空干燥烘箱_鼓风干燥箱 _高低温恒温恒湿试验箱_光照二氧化碳恒温培养箱-上海航佩仪器 | 户外健身路径_小区健身器材_室外健身器材厂家_价格-浩然体育 | 郑州巴特熔体泵有限公司专业的熔体泵,熔体齿轮泵与换网器生产厂家 | 粘弹体防腐胶带,聚丙烯防腐胶带-全民塑胶 | 不锈钢钢格栅板_热浸锌钢格板_镀锌钢格栅板_钢格栅盖板-格美瑞 | 上海物流公司,上海货运公司,上海物流专线-优骐物流公司 | 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) |