Django ManyToManyField.through_fields 和
示例:
from django.db import models class Person(models.Model):
name = models.CharField(max_length=50) class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership', through_fields=('group', 'person')) class Membership(models.Model):
group = models.ForeignKey(Group)
person = models.ForeignKey(Person)
inviter = models.ForeignKey(Person, related_name="membership_invites")
invite_reason = models.CharField(max_length=64)
成员对Person(person和inviter)有两个外键,这使关系不明确,Django无法知道要使用哪一个。在这种情况下,您必须明确指定Django应该使用through_fields使用哪些外键,如上例所示。
through_fields接受一个2元组('field1','field2'),其中field1是定义ManyToManyField的模型外键的名称(本例中为group PS:即因为"ManyToManyField"在Group上),field2是外键的名称目标模型(在这种情况下为人 PS:即因为"Person"是被关联的目标)。
如果在中介模型上有多个外键用于参与多对多关系的任何模型(或甚至两个模型),则必须指定through_fields。这也适用于使用中介模型时的递归关系,并且模型中有两个以上的外键,或者您想明确指定哪两个Django应该使用。
使用中间模型的递归关系总是被定义为非对称 - 也就是说,对称=假 - 因此,存在“源”和“目标”的概念。在这种情况下,'field1'将被视为关系的“源”,'field2'将被视为“目标”。
Django ManyToManyField.through_fields 和的更多相关文章
- Django 1.10 中文文档------3.2.1 模型Models
3.2.1 models模型 通常一个模型映射一张单独的数据表. 基本概念: 每个model都是django.db.models.Model的子类 model的每个属性代表数据表的某一列 Django ...
- 多对多中间表详解 -- Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...
- Django Model field reference
===================== Model field reference ===================== .. module:: django.db.models.field ...
- Django学习笔记(7)——单表操作和多表操作
单表操作 1,创建模型 创建名为book的APP,在book下的models.py中创建模型: from django.db import models # Create your models he ...
- django多对多中间表详解
我们都知道对于ManyToMany字段,Django采用的是第三张中间表的方式.通过这第三张表,来关联ManyToMany的双方.下面我们根据一个具体的例子,详细解说中间表的使用. 一.默认中间表 首 ...
- Django之模型系统
Django模型简介 Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中 Django 支持 sqlite3, MySQL, oracle,PostgreSQL等数 ...
- Django 多表查询
多表查询是模型层的重要功能之一, Django提供了一套基于关联字段独特的解决方案. ForeignKey 来自Django官方文档的模型示例: from django.db import model ...
- Django 1.10中文文档-模型参考
模型字段 本文档包含了Django提供的全部模型 Field 包括 字段选项 和 字段类型 的API参考. 参见 如果内建的字段不能满足你的需求, 你可以蚕食 django-localflavor ( ...
- 八、Django之Models(译)
模型(Models) 模型是你的数据的唯一的.确定的信息源. 它包含你所储存数据的必要字段和行为. 通常,每个模型对应数据库中唯一的一张表. 基础: 每个模型都是一个Python类,它们都是djang ...
随机推荐
- js 读取文本文件,日志内容
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- java中this的使用
java中的this随处可见,用法也多,现在整理有几点:this1.当全局变量跟局部变量重名时,表示使用全局变量(此时this指代本类对象)例有一类class A{ String name; ...
- ORACLE的客户端、后台进程
Oracle数据库进程之服务器进程详解 Oracle实例主要有三类进程:服务器进程.后台进程和从属进程.这里介绍一下Oracle数据库服务器进程的相关知识 Oracle数据库中的各个进程要完成某个特定 ...
- 20191011-构建我们公司自己的自动化接口测试框架-Util的AssertResult模块
AssertResult主要就是进行结果断言的了,因为断言结果分2种情况,一种是断言词,一种是断言sheet,如果涉及断言sheet,则需要操作excel到对应的断言表断言所有的字段并且书写断言结果主 ...
- 使用内存地址点亮LED—跟51单片机一样写代码教学(初步入门)
51单片机点亮一个小灯 #include <rge52.h> sbit LED = P0^ void main(void) { P0 = 0XFE; // 总线操作 sfr P0 0X80 ...
- 关于scanf()读取与返回值和回车键的问题
今天老师检查的时候说如果一个链表为空(简单的说就是while(scanf())一开始没输入数字就按回车的话会进入死循环)的情况, 我当时有点懵,因为文档里强调为空的情况.还好老师叫我自己现场实现一下, ...
- Eureka 注册中心一直报Connect to localhost:8761 time out 的问题
忽略了配置eureka.client.service-url.defaultZone而导致的异常,重新覆盖配置就好 client: fetch-registry: false register-wit ...
- hadoop2.7.7 分布式集群安装与配置
环境准备 服务器四台: 系统信息 角色 hostname IP地址 Centos7.4 Mster hadoop-master-001 10.0.15.100 Centos7.4 Slave hado ...
- 怎样修改原型对象prototype
修改原型对象的方法分为两种情况, 一种是对原型对象的属性方法做增删改, 一种改变原型对象的指向. 第一种: 对原型对象的属性/方法做增删改 function Person(name){ this.na ...
- CMake入门-01-从HelloWorld开始
工作环境 系统:macOS Mojave 10.14.6 CMake: Version 3.15.0-rc4 从 Hello,World! 开始 (1) 新建 hello 目录,创建文件 CMakeL ...