首页
学习
活动
专区
圈层
工具
发布

Django模型model

前言 根据前几篇文章的分享已经了解djangoWeb开发一般步骤为: 创建虚拟环境 安装django 创建项目 创建应用 在model.py中创建模型类 定义视图 配置url 创建模板 1....实例表示的日期 参数DateField.auto_now:每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false 参数DateField.auto_now_add...Django的模型进行数据库的查询操作的接口,Django应用的每个模型都拥有至少一个管理器 自定义管理器类主要用于两种情况 向管理器类中添加额外的方法创建管理器对象保存数据到数据库 class TestInfoManager...,django不会对数据库进行读写操作 在管理器的方法中,可以通过self.model来得到它所属的模型类 调用save()方法才与数据库交互,将对象保存到数据库中 使用关键字参数构造模型对象很麻烦,推荐使用下面的两种之式...:test.save() DoesNotExist:在进行单个查询时,模型的对象不存在时会引发此异常,结合try/except使用 实例方法 str (self):重写object方法,此方法在将对象转换成字符串时会被调用

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    37.Django1.11.6文档

    在模型实例不包含数据的情况下,在模板中对它做处理很少有什么用处。 但是渲染一个未填充的表单却非常有意义 —— 我们希望用户去填充它。 所以当我们在视图中处理模型实例时,我们一般从数据库中获取它。...当我们实例化表单时,我们可以选择让它为空还是预先填充它,例如使用: 来自一个保存后的模型实例的数据(例如用于编辑的管理表单) 我们从其它地方获得的数据 从前面一个HTML 表单提交过来的数据 获取HTML...这是因为只有实例在数据库中存在时才可以保存实例的多对多数据。...处理这种情况的最好方法是为您的后端存在的每个用户创建一个Django User对象(例如,在LDAP目录,外部SQL数据库等中) 你可以先写一个脚本来做这件事, 或者用你的 authenticate 方法在用户登陆的时候完成这件事...相同的URLconf 中的多个管理站点 在同一个Django供电的网站上创建管理站点的多个实例很容易。 只需要创建AdminSite 的多个实例并将每个实例放置在不同的URL 下。

    25.5K80

    django 1.8 官方文档翻译: 5-1-1 使用表单

    考虑一下Django 的Admin 站点,不同类型的大量数据项需要在一个表单中准备好、渲染成HTML、使用一个方便的界面编辑、返回给服务器、验证并清除,然后保存或者向后继续处理。...在模型实例不包含数据的情况下,在模板中对它做处理很少有什么用处。但是渲染一个未填充的表单却非常有意义 —— 我们希望用户去填充它。 所以当我们在视图中处理模型实例时,我们一般从数据库中获取它。...当我们实例化表单时,我们可以选择让它为空还是预先填充它,例如使用: 来自一个保存后的模型实例的数据(例如用于编辑的管理表单) 我们从其它地方获得的数据 从前面一个HTML 表单提交过来的数据 最后一种情况最令人关注...这是我们在第一个访问该URL 时预期发生的情况。 如果表单的提交使用POST 请求,那么视图将再次创建一个表单实例并使用请求中的数据填充它:form = NameForm(request.POST)。...可重用的表单模板 如果你的网站在多个地方对表单使用相同的渲染逻辑,你可以保存表单的循环到一个单独的模板中来减少重复,然后在其它模板中使用include 标签来重用它: # In your form template

    5.5K20

    django 1.8 官方文档翻译: 2-2-1 执行查询

    为了把数据库表中的数据表示成python对象,django使用一种直观的方式:一个模型类代表数据库的一个表,一个模型的实例代表数据库表中的一条特定的记录。...使用关键词参数实例化一个对象来创建它,然后调用save()把它保存到数据库中。...如果你想只用一条语句创建并保存一个对象,使用create()方法。 保存对象的改动 调用save()方法,来保存已经存在于数据库中的对象的改动。...下面的例子更新了Entry类的实例entry的blog属性,假设Entry的一个合适的实例以及Blog已经保存在数据库中(我们可以像下面那样获取他们): >>> from blog.models import...如果 clear() 方法是可用的,在迭代器(上例中就是一个列表)中的对象加入到 entry_set 之前,已存在于关联集合中的所有对象将被清空。

    5.1K20

    ​第 07 篇:创作后台开启,请开始你的表演!

    在 admin 后台注册模型 要在后台注册我们自己创建的几个模型,这样 django admin 才能知道它们的存在,注册非常简单,只需要在 blog\admin.py 中加入下面的代码: blog/admin.py..., change): obj.author = request.user super().save_model(request, obj, form, change) 最后还剩下文章的创建时间和修改时间需要填充...首先,Model 中定义的每个 Field 都接收一个 default 关键字参数,这个参数的含义是,如果将 model 的实例保存到数据库时,对应的 Field 没有设置值,那么 django 会取这个...答案是不能,因为虽然第一次保存数据时,会根据默认值指定为当前时间,但是当模型数据第二次修改时,由于 modified_time 已经有值,即第一次的默认值,那么第二次保存时默认值就不会起作用了,如果我们不修改...modified_time 的值的话,其值永远是第一次保存数据库时的默认值。

    1.5K20

    Django之QuerySet详解

    ;具有多个children的每个Event将被多次返回到order_by()创建的新的QuerySet中。....]> 如果有多个字段,传递flat将发生错误。 如果不传递任何值给values_list(),它将返回模型中的所有字段,以在模型中定义的顺序。 常见的情况是获取某个模型实例的特定字段值。...使用这种方法作为最后的手段,这是一个旧的API,在将来的某个时候可能被弃用。仅当无法使用其他查询方法表达查询时才使用它。 例如: >>> qs.extra( ......Entry.objects.defer("body").only("headline", "body") 当对具有延迟字段的实例调用save()时,仅保存加载的字段。...最后建议只在Django视图的POST请求中使用get_or_create(),因为这是一个具有修改性质的动作,不应该使用在GET请求中,那样不安全。

    3.1K20

    七日Python之路--第十二天(Django Web 开发指南)

    其他语言一般使用new来创建实例,Python使用的是‘初始化程序’initializer 而不是‘构造函数’constructor 即'__init__'函数 Python...可以‘凭空’创造实例的属性 (10)正则 ! (11)关于模块 Python有导入模块和加载模块之分。模块可以被导入多次,但只会被加载一次。...添加 class Meta: abstract = True #这样不会创建数据库表,只是用来为其他实体类提供属性而存在的 ---- 唉,刚吃完晚饭。外面竟下起了瓢泼大雨。...(7)使用模型 Django项目中 manage.py 脚本包含了操作数据库的功能。syncdb只能保证所有模型类都有对应的数据库表,但不会修改已经存在的数据库表。...[0]或kwargs['object_id'] 而不需要再记住 URLconf中的名称了 ##当然在 Django1.6中,完全可以不用在URLconf中使用 ?

    2.1K20

    django 1.8 官方文档翻译: 2-3-1 模型实例参考

    创建对象 要创建模型的一个新实例,只需要像其它Python 类一样实例化它: class Model(**kwargs) 关键字参数就是在你的模型中定义的字段的名字。...除了创建新模型之前,from_db() 必须设置新实例_state 属性中的adding 和 db 标志位。...在上面的示例中,Model.clean() 引发的ValidationError 异常通过一个字符串实例化,所以它将被保存在一个特殊的错误字典键NON_FIELD_ERRORS中。...如果你手工赋值一个自增主键的值,请确保不要使用一个已经存在的主键值!如果你使用数据库中已经存在的主键值创建一个新的对象,Django 将假设你正在修改这个已存在的记录而不是创建一个新的记录。...空的update_fields 可迭代对象将会忽略保存。如果为None 值,将执行所有字段上的更新。 指定update_fields 将强制使用更新操作。

    2.5K10

    Django-官网查询部分翻译(1.11版本文档)-QuerySet-字段查找-06

    (ORM)中,数据库与 python 对象的映射关系十分形象,一个表模型类(class)即代表一张表,实例化出一个对象即代表一条数据记录 创建一个对象(一条数据记录) 在 django 中要想创建一个数据对象...,下面的语句是更新一个 Entry 模型类实例化出来的 entry 对象的 blog 属性(请确保下面用到的 Entry 和 Blog 的实例化对象已经存在在数据库中,这样我们的语句才能将它们查出来)...其实它只执行了一次,只在执行最后一行 print(q) 的时候执行了数据库操作。...新创建的 QuerySet 的缓存(cache)是空的,QuerySet 第一次取值执行(evaluatad)的时候进行数据库查询操作,Django 会将查询结果保存到 QuerySet 的 cache...用 django 表模型类创建的表会自动加上 app 的前缀(显然这里的 app 叫 blog) lookuptype 查找类型分类整理 此部分为伪代码,仅演示这些字段查询的功能用法以及对应 SQL

    3.2K20

    后端框架学习-Django

    b.如果涉及到数据调用,那么视图函数调用模型,模型去数据库查找数据,然后逐级返回。 视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。...('参数名') 如果有传递多个值,则参数对应的应该是一个列表,需要使用getlist方法取出所有值,get方法只能取出最后一个值。...在模板中使用实际括号是无效的语法,如果需要指示优先级,则应该选择嵌套if for标签 语法 {% for 变量 in 可迭代对象 %} …循环语句 {% empty %} …可迭代对象无数据时填充语句...1.生成迁移文件: python manage.py makemigrations 生成一个中间文件,并保存在migrations文件夹中 2.执行迁移脚本程序 python...中保存在数据库中,因此需要保证已经执行过了migrate Django session的问题: 1.django session的表是单表设计,且该表数据量不会自动清理,哪怕是已经过期。

    10.9K40

    django_2

    ·每次保存对象时,自动设置该字段为当前时间, 用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false 修改一次记录一次 ·DateField.auto_now_add...在自定义的模型中无法使用 在模型类中增加类方法去创建对象 @classmethod def create(cls,p_name,p_age=100):...get 不存在会抛异常 DoesNotExist 存在多于一个 MultipleObjectsReturned 使用这个函数 记得捕获异常 last 返回查询集种的最后一个对象 first...Python的datetime.date实例表示的日期 ·参数说明 ·DateField.auto_now ·每次保存对象时,自动设置该字段为当前时间, 用于"最后一次修改..."的时间戳,它总是使用当前日期,默认为false ·DateField.auto_now_add ·当对象第一次被创建时自动设置当前时间, 用于创建的时间戳,它总是使用当前日期

    4.4K30

    django 1.8 官方文档翻译: 1-2-1 编写你的第一个Django应用,第1部分

    创建一个项目 如果这是你第一次使用 Django ,那么你必须进行一些初始设置。...如果该文件不存在,它会在第一次同步数据库时自动创建(见下文)。 当指定路径时,总是使用正斜杠,即使是在 Windows 下(例如:C:/homes/user/mysite/sqlite3.db) 。...在本例中,我们仅定义了一个符合人类习惯的字段名 Poll.pub_date 。对于模型中的其他字段,机器名称就已经足够替代人类名称了。 一些 Field 实例是需要参数的。...一个 Field 实例可以有不同的可选参数; 在本例中,我们将 votes 的 default 的值设为 0 。 最后,注意我们使用了 ForeignKey 定义了一个关联。...该操作会为你上一次执行 syncdb 命令以来在项目中添加的任何应用创建对应的表、初始化数据和创建索引。 syncdb 命令只要你喜欢就可以任意调用,并且它仅会创建不存在的表。

    1.3K20

    07.Django学习之model进阶

    叫做queryset缓存空间 在一个新创建的查询集中,缓存为空。首次对查询集进行求值 —— 同时发生数据库查询 ——Django 将保存查询的结果到查询集(非简单查询的查询结果,简单查询往下看。)...的缓存中并返回明确请求的结果(例如,如果正在迭代查询集,则返回下一个结果)。接下来对该查询集 的求值将重用缓存的结果。 请牢记这个缓存行为,因为对查询集使用不当的话,它会坑你的。...查询集不会永远缓存它们的结果。当只对查询集的部分进行求值时会检查缓存, 如果这个部分不在缓存中,那么接下来查询返回的记录都将不会被缓存。所以,这意味着使用切片或索引来限制查询集将不会填充缓存。...,这样可以节省内存 for obj in objs: print(obj.title) #BUT,再次遍历没有打印,因为迭代器已经在上一次遍历(next)到最后一次了,没得遍历了 for obj...所以它们不能在使用中介模型的多对多关系中使用。此时,唯一的办法就是创建中介模型的实例。 remove()方法被禁用也是出于同样的原因。但是clear() 方法却是可用的。

    2.2K30

    05.Django基础五之django模型层(一)单表操作

    创建名为book的app,在book下的models.py中创建模型: from django.db import models # Create your models here....用来标识这条记录最后一次的修改时间,具有auto_now属性,当记录发生变化时填充当前时间到此字段 就像下边这样的表结构 class User(models.Model): create_time...那么django是如何生成数据库表的呢, django是根据 migration下面的脚本文件来生成数据表的 每个migration文件夹下面有多个脚本,那么django是如何知道该执行那个文件的呢...,django有一张django-migrations表,表中记录了已经执行的脚本,那么表中没有的就是还没执行的脚本,则 执行migrate的时候就只执行表中没有记录的那些脚本。...model的实例化对象,而是一个可迭代的字典序列,只要是返回的queryset类型,就可以继续链式调用queryset类型的其他的查找方法,其他方法也是一样的。

    3.3K10

    Azure 机器学习 - 无代码自动机器学习的预测需求

    | 训练作业时间(小时):3 指标分数阈值:无 | | 并发 | 每次迭代执行的并行迭代的最大数目 | 最大并发迭代数:6 | 选择“保存”。 选择“下一步” 。...运行以后,每个迭代还需要 2-3 分钟。 在生产环境中,此过程需要一段时间,因此不妨干点其他的事。 在等待过程中,我们建议在“模型”选项卡上开始浏览已完成测试的算法。...| | 使用自定义部署资产 | 禁用。 禁用此选项可以自动生成默认驱动程序文件(评分脚本)和环境文件。 | 本示例使用“高级”菜单中提供的默认值。 选择“部署”。...否则,如果你不打算使用任何文件,请删除整个资源组。 删除部署实例 若要保留资源组和工作区以便在其他教程和探索中使用,请仅从 Azure 机器学习工作室中删除部署实例。...如果你不打算使用已创建的任何资源,请删除它们,以免产生任何费用: 在 Azure 门户中,选择最左侧的“资源组” 。 从列表中选择你创建的资源组。 选择“删除资源组”。 输入资源组名称。

    64420

    Azure 机器学习 - 使用无代码 AutoML 训练分类模型

    使用易于记忆且区别于其他人所创建工作区的名称。 工作区名称不区分大小写。 订阅 选择要使用的 Azure 订阅。 资源组 使用订阅中的现有资源组,或者输入一个名称以创建新的资源组。...有关在 Azure 中创建工作区的其他方法,请参阅在门户中或使用 Python SDK (v2) 管理 Azure 机器学习工作区。...| 训练作业时间(小时):1 指标分数阈值:无 | | 并发 | 每次迭代执行的并行迭代的最大数目 | 最大并发迭代数:5 | 选择“保存”。 选择“下一步” 。...| | 使用自定义部署 | 禁用。 允许自动生成默认驱动程序文件(评分脚本)和环境文件。 | 本示例使用“高级”菜单中提供的默认值。 选择“部署”。...删除部署实例 若要保留资源组和工作区以便在其他教程和探索中使用,请从 https://ml.azure.com/ 处的 Azure 机器学习中仅删除部署实例。 转到 Azure 机器学习。

    75620

    00x: Django models.Model详解

    需要注意一点,不要使用和models API冲突的名字来命名字段例如clean,save或者delete。 例子: 字段类型 你模型中的每一个字段应该是一个Field类的实例。...主键的字段是只读的。如果你改变了现有对象的主键的值然后保存了这个对象,一个新的对象就会和旧的对象并行创建。啥意思呢?...Many-to-one 使用django.db.models.ForeignKey来定义Many-to-one这种关系。这个类的使用和其他字段的定义一样,也是作为一个属性存在。...最后,如果你只是想要修改Python语言级别的model行为而不修改models的字段,你可以使用Proxy models。 抽象基类 抽象基类在你想要在你的模型中加入一些信息的时候很有用。...CommonInfo模型不能被用作是一个正常的Django模型,因为他是一个抽象基类,它不会生成数据库表或者有manager,不能被直接实例化或者保存。

    2.1K20
    领券