Code前端首页关于Code前端联系我们

Django 教程:ORM 自定义字段和参数

terry 2年前 (2023-09-24) 阅读数 52 #后端开发

1。模板中常用字段类型


字段类型

类型 描述
AutoField自动递增的 IntegerField,通常不需要自动定义 Djang 属性,通常不需要自动定义 Djang 属性。给定的 ID。
BooleanField布尔字段,取值为True或False
NullBooleanField支持三个值​​​Null、True、False
参数 max_length 表示最大字符数,对应mysql中的varchar。
TextField 大型文本字段,通常用于大型文本字段(超过4000种)。 IntegerField , numberdecimal_places 表示十进制数,常用于表示零件和价格 Decimal(max_yaoming=7,decimal_places=2) ==> 99999.99~ 0.00
FloatField浮点数
DateField ♼DateField _now 表示每当保存对象时,该字段都会自动设置为当前时间。
auto_now_add 参数表示在第一次创建对象时自动设置当前值。
auto_now_add 和 auto_now 参数不一样,一起使用会出错。
TimeField时间,参数与DateField相同。
DateTimeField日期时间,参数与DateField相同。
FileField包含一个文件字段,Django在文件字段中内置了文件上传和存储类。 Django 可以使用模型的保存字段自动保存上传的文件。但是,只有项目中的文件才会存储在存档中。节省的方法! !
ImageField继承自FileField,并检查输入的内容以确保它是有效的图像。
EmailField字符串类型,与邮箱

2相关。约束选项


选项 描述
null 如果为 True,则表示留空,默认值为 False。相当于python的None。
空白 如果为 True,则该字段留空,默认值为 False。相当于Python的空字符串,“”
db_column字段的名称,如果没有指定,则为属性的名称。
db_index如果该值为True,则会在表中为此字段创建索引。默认值为 false。相当于SQL语句中的key。
default默认值,当没有完整数据时,该选项的值作为数据的默认值。
primary_key如果为 True,则该字段将成为模型密钥。默认值为 false。一般情况下不需要安装。默认系统。
unique 如果为 True,则该字段在表中必须具有唯一值。默认值为 false。与 SQL 语句中的 single 相同。
max_length最大字符长度
verbose_name名称匹配、评论
max_digitsp最大数字dec小数点最大位数
设置相关表
to_field设置相关字段
db_constraint或者创建外键约束,默认为True❀name名称请求字段,可以使用修改后的字段稍后命名,与
相同on_delete删除相关表中的数据时,当前表及其相关行的动作

注:null是数据类别中的参数,blank是表单验证类别中的参数。

外键

设置访客密钥时,需要使用 on_delete 设置访客密钥时,需要使用 on_delete 删除选项外部数据,如何删除表d中的数据 jango .db.models 有可选常量:

  • CASCADE 级联动作,当删除主表中的相关数据时,与该表关联的数据会同时删除
  • PROTECT
  • 当主表删除该行数据时,由于从表相关字段受外键保护,所以无法删除
  • SET_NULL 当删除主表中的一行数据时,从表中与其关联的数据也会被删除。关联字段设置为空。目前请注意,定义外键时,该字段必须留空。所有相关数据都在slave中。表设置为 Value default,请注意,定义外键时,此外键字段应该有一个默认值
  • DO_NOTHING 不执行任何操作。一切都取决于数据库级别的限制。请注意,数据库级别的默认约束是 RESTRICT。该约束与模型类似。 PROTECT from django
  • SET() 当删除主表中的一条数据时,它会被设置为 SET() 中设置的值,类似于 models.SET_DEFAULT,或者但是,此时,它不是需要从表的相关字段设置默认参数
def func():
    return 10

class MyModel(models.Model):
    user = models.ForeignKey(
        to = "User",
        to_field = "id",
        on_delete = models.SET(func)
    )

3. 标准查询


返回 QuerySet 对象

def func():
    return 10

class MyModel(models.Model):
    user = models.ForeignKey(
        to = "User",
        to_field = "id",
        on_delete = models.SET(func)
    )

) 询问所有答案。

  • filter() 包含与给定过滤条件匹配的对象。
  • exclude() 排除不符合给定过滤条件的对象。
  • order_by() 默认按升序/(-field) 降序对查询结果进行排序。
  • reverse() 如果数据是通过order_by()排序的,则反转查询结果。
  • distinct() 从返回结果中删除重复文件。
  • 返回对象

    • get() 返回与给定过滤条件匹配的对象。仅返回一个响应。如果有多个对象满足过滤条件或者没有对象,则将其丢弃。错误。
    • first() 返回第一条记录
    • last() 返回最后一条记录

    返回布尔值

    • last() 返回最后一条记录

    返回布尔值 如果有的话返回 True 数据。

    返回数字

    • count()统计当前数据条数。

    返回查询集

    • values() 返回 ValueQuerySet,一个自定义查询集。运行后得到的不是一个建模对象数组,而是一个可迭代的字典数组。
    • values_list() 与values() 非常相似。它返回元组的顺序,值返回字典的顺序。

    4. 双下划线


    过滤器不能写入逻辑运算符。而是提供了一种特殊的方法来回答逻辑问题,那就是双线。

    返回值 = models.User.objects.filter(字段__contains = '条件')
    方法 函数
    字段 __gt 大于字段 __lt 小于
    字段 __gte 大于字段 __lt小于
    场 __gte ♿❿ 小于等于
    字段__in成员函数,在什么
    字段__range范围查询
    字段__contains 敏感查询
    不明确查询,忽略大小写
    字段 __starts with 匹配开头
    字段 __ends with 匹配结尾
    字段 __regex 正则表达式 __year 过滤器 __year 年
    田__月月份过滤器
    字段 __day 按天过滤数据

    5. Django 中的自定义 char 类型


    CharField 对应 MySQL 数据库中的 varchar 类型。

    没有与 char 类型匹配的字段,但 Django 允许创建与数据库中的 char 类型匹配的新字段。

    自定义字段在实际项目应用中可能会经常使用,因此您需要对其进行一些理解! ? 7。 ORM字段与MySQL字段的关系


    ORM ORM字段对应MySQL字段 8. Django终端打印SQL语句 如果你想了解 Django 如何执行 SQL里面的语句在使用数据库的时候,可以添加下面的Configuration来检查。

    在Django项目的settings.py文件中,将以下代码复制并粘贴到末尾。

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console':{
                'level':'DEBUG',
                'class':'logging.StreamHandler',
            },
        },
        'loggers': {
            'django.db.backends': {
                'handlers': ['console'],
                'propagate': True,
                'level':'DEBUG',
            },
        }
    }

    确认后,执行任何在数据库中工作的语句时,Django的SQL语句都会自动输出到终端。

    帮助:

    • 除了配置之外,还可以使用.query查看查询语句。

    版权声明

    本文仅代表作者观点,不代表Code前端网立场。
    本文系作者Code前端网发表,如需转载,请注明页面地址。

    发表评论:

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    热门