Django——模型基础

查询操作是Django的ORM框架中最重要的内容之一。建立模型、保存数据为的就是在需要的时候可以查询得到数据

本文的内容基于如下的一个博客应用模型:

class User(models.Model):
    """用户表"""
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    blog = models.OneToOne(to=‘Blog‘,on_delete=models.CASCADE)

class Blog(models.Model):
    """博客表"""
    title = models.CharField(max_length=32)

class Tag(models.Model):
    """标签表"""
    title = models.CharField(max_length=32, default=‘‘)
    blog = models.ForeignKey(to=‘Blog‘,on_delete=models.CASCADE)

class Blog(models.Model):
    """博文表"""
    user = models.ForeignKey( to=‘User‘, on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    content = models.TextField( default=‘‘)
    create_time = models.DateTimeField( default=timezone.now)
    tag = models.ManyToManyField(Tag)

1.一对多(ForeignKey)

1.正向查询

正向访问就是通过含有ForeignKey字段的表查询其关联表,本例中为通过Blog的user列查询表BlogUser。

查询方法:直接通过圆点加属性,访问外键对象:

obj = models.Blog.objects.get(id=1)
b = obj.user   # b即为关联的Blog对象

要注意的是,对外键的修改,必须调用save方法进行保存:

obj = models.Blog.objects.get(id=1)
obj.user = another_user
obj.save()    # 修改后要保存

2.反向查询

反向访问就是通过外键的关联表查询含有ForeignKey字段的表,本例中为通过表BlogUser查询表Blog。

查询方法:通过一个管理器进行反向查询,返回源模型的所有实例。默认情况下,这个管理器的名字为FOO_set,其中FOO是要查找模型的小写名称(本例为Blog的小写)。该管理器返回的查询集还可以进行过滤和操作:

obj2 = models.BlogUser.objects.get(id=2)
u = obj2.blog_set.all()   # 返回所有Blog对象(与BlogUser表中id=2关联的对象)

还可以在ForeignKey字段的定义中,通过设置related_name来重写FOO_set的名字,例如:把Blog表的user字段修改为:user = models.ForeignKey(verbose_name=‘作者‘, to=‘BlogUser‘, on_delete=‘models.CASCADE‘, related_name=‘blogs‘),那么上面的查询将变成:

obj2 = models.BlogUser.objects.get(id=2)
u = obj2.blogs.all()

2.多对多(ManyToMany)

多对多关系的两端都会自动获得访问另一端的API。这些API的工作方式与前面提到的“反向”一对多关系的用法一样。

唯一的区别在于属性的名称:定义ManyToManyField的模型使用该字段的属性名称,而“反向”模型使用源模型的小写名称加上‘_set‘ (和一对多关系一样)。

原文地址:https://www.cnblogs.com/lymlike/p/11467042.html

时间: 2024-08-02 17:16:04

Django——模型基础的相关文章

Django——模型基础(单表)

1.ORM 在MVC或者说MTV设计模式中,模型(M)代表对数据库的操作.但操作数据库需要专门的SQL语句,而Python程序员不是专业的DBA,写的SQL语句可能有点次,于是就有人想到用python语法来操作,这就是ORM. ORM 即:对象—关系—映射(从https://www.cnblogs.com/huang-yc/p/9652935.html盗来一张图,顺便吹下这位博主!) 简单又不太专业的说就是通过映射关系使得一个python语句对应一个SQL语句,这样python程序员无需关心OR

Django模型

数据库表的设计 设计系统表 Django提供完善的模型(model)层主要用来创建和存取数据,不需要我们直接对数据库操作. Django模型基础知识:每个模型是一个Python类,继承django.db.models.model类.该模型的每个属性表示一个数据库表字段.所有这一切,已经给你一个自动生成的数据库访问的API. 1.打开.../sign/models.py文件,完成表的创建 from django.db import models # Create your models here.

09 Django 模型(数据库)

Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py中配置即可,不用更改models.py中的代码,丰富的API极大的方便了使用. 一.打开model文件,修改其中代码 from django.db import models class Person(models.Model): name = models.CharField(max_length

Python之路【第十六篇】:Django【基础篇】

Python之路[第十六篇]:Django[基础篇] Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. 基本配置 一.创建django程序 终端命令:django-admin startproject sitename IDE创建Django程序时,本质上都是自动执行上述命令 其他常用命令: python manage.py runserver

Python开发【第二十一篇】:Web框架之Django【基础】

Python开发[第二十一篇]:Web框架之Django[基础] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5237704.html Python之路[第十六篇]:Django[基础篇] Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. 基本配置 一.创建django程序 终端命令:django-a

django模型models.py文件内容理解

首先,要理解这句话:模型是你的数据的唯一的.权威的信息源.它包含你所存储数据的必要字段和行为.通常,每个模型对应数据库中唯一的一张表 基础:每个模型都是django.db.models.Model的一个python子类 模型的每个属性都表示为数据库中的一个字段 django提供一套自动生成的用于数据库访问的API,下一章总结 1.第一个例子 from django.db import models class Person(models.Model): first_name = models.C

Django模型开发 --python数据库连接

在Django中,视图负责处理一些业务逻辑,然后返回响应结果.在当代Web应用中,业务逻辑经常牵涉到与数据库的交互,在后台连接数据库服务器,从中取出一些数据,然后在Web页面用漂亮的格式展示这些数据.这个网站也可能会向访问者提供修改数据库数据的方法. 在这一篇博文中,我们将以MySQL数据库为例,先看看不使用Django模型的数据库查询方法,然后开始学习Django的模型. 1. 不使用模型的数据库查询方法 假如我们不采用Django的模型,如何从数据库中获取数据呢?通常的做法就是在视图(Vie

Django模型类之models字段类型和参数以及元数据meta

models之字段类型和参数 示例: # class Test(models.Model): # courses_test # """测试学习用""" # # Auto = models.AutoField() # 自增长字段 # # BigAuto = models.BigAutoField() # # # 二进制数据 # Binary = models.BinaryField() # # # 布尔型 # Boolean = models.Bo

django模型系统一

一.复习 代码布局(代码放在哪里) app目录下:必需放在app目录下 templatetags文件夹,不能写错一个字符 app必需注册 1.自定义过滤器 为什么(案例:男:1,女:0...怎么展示) 定义:过滤器就是一个函数. --有1到2个参数 --第一个参数传进来的是模板变量.(过滤器必需依赖模板变量) --第二个参数其他的参数 --return你想要显示的数据 注册过滤器: from django.template import Library register=Library() 这个