Django-中介模型
有多对多字段的时候自己创建的第三章表就是中介模型
- class Article(models.Model):
- '''
- 文章表
- '''
- title = models.CharField(max_length=64,verbose_name="文章标题")
- summary = models.CharField(max_length=244, verbose_name="文章概要")
- create_time = models.DateTimeField(verbose_name="创建时间",auto_now_add=True)
- update_time = models.DateTimeField(verbose_name="修改时间",auto_now=True)
- up_count = models.IntegerField(verbose_name="点赞数",default=0)
- down_count = models.IntegerField(verbose_name="点灭数",default=0)
- comment_count = models.IntegerField(verbose_name="评论数",default=0)
- read_count = models.IntegerField(verbose_name="阅读数",default=0)
- user = models.ForeignKey(to="UserInfo",verbose_name="所属作者",null=True,blank=True)
- classify = models.ForeignKey(to="Classfication",verbose_name="所属类别",null=True,blank=True)
- tags = models.ManyToManyField(to="Tag",through="Article2tag",through_fields=('article', 'tag'),verbose_name="所属标签")
- site_article_category = models.ForeignKey(to="SiteArticleCategory",verbose_name="所属文章分类",null=True,blank=True)
- class Meta:
- verbose_name_plural = "文章表"
- def __str__(self):
- return self.title
- class Tag(models.Model):
- '''标签表'''
- name = models.CharField(max_length=32,verbose_name="标签名")
- blog = models.ForeignKey(to="Blog",verbose_name="所属博客")
- class Meta:
- verbose_name_plural = "标签表"
- def __str__(self):
- return self.name
- class Article2tag(models.Model):
- article = models.ForeignKey(verbose_name="文章",to="Article")
- tag = models.ForeignKey(verbose_name="标签",to="Tag")
- class Meta:
- verbose_name="文章和标签关系表"
- '''联合唯一'''
- unique_together = [
- ("article","tag")
- ]
- def __str__(self):
- return self.article.title + " "+self.tag.name
- 像是这样自己创建的第三张表就属于是中介模型。一般就Django会给我们自动创建第三张表,
- 人家自己创建的只是有关系字段,不能在增加其他的字段了,
- 如果根据需求添加其他字段,不需要ManytoMany自己创建第三张表就自己设置第三张表
- 这就需要我们自己去创建第三张表。
- 当然我现在设计的Article2tag这个第三张表就可以在里面添加其他你需要的字段。
- 如果用了中介模型了,就不能在用add,remove了
- 为什么不能这样做? 这是因为你不能只创建 article和 tag之间的关联关系,你还要指定 Membership模型中所需要的所有信息;而简单的add、create 和赋值语句是做不到这一点的。所以它们不能在使用中介模型的多对多关系中使用。此时,唯一的办法就是创建中介模型的实例。
- remove()方法被禁用也是出于同样的原因。但是clear() 方法却是可用的。它可以清空某个实例所有的多对多关系:
Django-中介模型的更多相关文章
- django中介模型,CBV模型,及logging日志配制
1.中介模型 中介模型,这个是在我们创建表格时,多对多添加的时候应用到的,通过制定ManyToManyField字段中的through参数来定义,为两者的关系新建一个中介class 为什么会产生这个中 ...
- Django进阶之QuerySet和中介模型
QuerySet QuerySet是查询集,就是传到服务器上的url里面的查询内容.其形态类似于Python的列表,列表中的元素是QuerySet对象.支持大部分列表的内置方法. 可切片 QueryS ...
- Django - 回顾(2)- 中介模型
一.中介模型 我们之前学习图书管理系统时,设计了Publish.Book.Author.AuthorDetail这样几张表,其中Book表和Author表是多对多关系,处理类似这样简单的多对多关系时, ...
- Django框架 之 ORM中介模型
Django框架 之 ORM中介模型 中介模型 处理类似搭配 pizza 和 topping 这样简单的多对多关系时,使用标准的ManyToManyField 就可以了.但是,有时你可能需要关联数据 ...
- Django【第26篇】:中介模型以及优化查询以及CBV模式
中介模型以及优化查询以及CBV模式 一.中介模型:多对多添加的时候用到中介模型 自己创建的第三张表就属于是中介模型 class Article(models.Model): ''' 文章表 ''' t ...
- Django QuerySet和中介模型
笔记如下 一.QuerySet QuerySet是什么? 类似列表里边存着对象 只和ORM有关系 from app01.models import Book def qDemo(request): b ...
- Orm之中介模型
什么是中介模型 中介模型针对的是ManyToMany(多对多)的时候第三张表的问题, 中介模型其实指的就是我们不通过Django创建第三张表,如果自己不创建第三张表,而是由django给我们创建,那就 ...
- 中介模型以及优化查询以及CBV模式
一.中介模型:多对多添加的时候用到中介模型 自己创建的第三张表就属于是中介模型 class Article(models.Model): ''' 文章表 ''' title = models.Char ...
- 中介模型,cbv视图,和查询优化
中介模型: 处理类似搭配 pizza 和 topping 这样简单的多对多关系时,使用标准的ManyToManyField 就可以了.但是,有时你可能需要关联数据到两个模型之间的关系上. 例如,有这 ...
- Django框架(十) Django之模型进阶
QuerySet对象 可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMIT 和OFFSET 子句. Entry.objects.all()[:5] # (LIMI ...
随机推荐
- hdu6097[二分+解析几何] 2017多校6
/*hdu6097[二分+解析几何] 2017多校6*/ #include <bits/stdc++.h> using namespace std; ; struct node{ doub ...
- 【bzoj2698】染色 期望
题目描述 输入 输入一行四个整数,分别为N.M.S和T. 输出 输出一行为期望值,保留3位小数. 样例输入 5 1 2 3 样例输出 2.429 题解 期望 由于期望在任何时候都是可加的,因此只要算出 ...
- Master&Slave是什么?
由于前段时间公司项目比较赶,一直抽不出时间写博客,今天偷空写一篇吧.前面给大家讲解了单机版redis的基本操作,现在继续给大家讲解一下Redis的进阶部分,主从复制和读写分离. 一.Master&am ...
- Topcoder SRMCards ——贪心
选择一个数x会删去x+1和x-1,问可以最多选多少次. 显然,对于一段连续的数列,贪心的从左向右选取是最优的. 然后就可以贪心的统计答案了. #include <map> #include ...
- ubuntu下卸载python2和升级python3.5
卸载python只需一条语句就可以实现 sudu apt-get remove python ubuntu下安装python3 sudo apt-get install python3 但这样只安装了 ...
- Linux运维打怪升级篇,从苦逼到牛逼的必备装备(转)
http://chenhao6.blog.51cto.com/6228054/1949673
- javascript script load related【转】
先来看这行代码: <script src = "allMyClientSideCode.js"></script> 这有点儿……不怎么样.“这该放在哪儿?” ...
- 【kindeditor】KindEditor获取多个textarea文本框的值并判断非空
kindeditor官网:http://kindeditor.net/demo.php 如何获取多个KindEditor中textarea文本框的值,方式很多种(带有HTML标签). var intr ...
- 获取cookie中的某个参数值
因为cookie的值是很多key=value连接起来的字符串,所以如果要取cookie中某个key的值: function getCookie(name) { let cookieValue = nu ...
- Mac下Android SDK更新不了的解决办法
在hosts文件中加入: 203.208.46.146 dl.google.com 203.208.46.146 dl-ssl.google.com