Django:model中的ForeignKey理解
有两个数据模型栏目模型和文章模型ArticleColumn和ArticlePost
ArticleColumn:
class ArticleColumn(models.Model):
# 用户与栏目是“一对多”关系,所以用ForeignKey,一个用户可以设置多个栏目,此处的user字段对应实际表中的user_id,来自于User表中主键
user = models.ForeignKey(User, related_name='article_column')
column = models.CharField(max_length=100)
created = models.DateTimeField(auto_now_add=True)
ArticlePost:
class ArticlePost(models.Model):
author = models.ForeignKey(User, related_name='article')
title = models.CharField(max_length=200)
slug = models.SlugField(max_length=500)
column = models.ForeignKey(ArticleColumn, related_name='article_column')
body = models.TextField()
created = models.DateTimeField(default=timezone.now())
updated = models.DateTimeField(auto_now_add=True)
# media/%Y%m%d/为图片的真实放置路径,因为settings中已经配置了MEDIA_ROOT为media文件夹,blank=True允许表单的该字段对应值为空,意思是非必填字段
avatar = models.ImageField(upload_to='%Y%m%d/', blank=True)
可以看到在ArticlePost模型中有一个字段为column,且类型为ForeignKey,意思是外键,代表的是“多对一”的关系,第一个参数ArticleColumn是对应的模型名称,related_name为反查时的关联名称。
多对一指的是,多个文章可以对应一个栏目,比如有10篇文章都是属于django栏目的(当然一个文章也可以对应多个栏目,这样就是多对多关系了:ManyToManyField,此处我们设计不存在这种情况),
有了外键关系后,那如何去查询某篇文章对应的所属栏目呢?
article = ArticlePost.objects.get(id=150) article.column
如果不使用外键关系,想查询某篇文章对应的所属栏目呢?
# 获取该文章对象
article = ArticlePost.objects.get(id=150)
# 找到该文章对象对应的column_id,column_id这一列就是因为ArticlePost模型中有column字段且将ArticleColumn作为外键,所以将ArticleColumn模型对应表中的主键id的值作为column_id的值,将列名命名为column_id
article.column_id
# 根据上面查出来的id找到该栏目对象
column = ArticleColumn.objects.get(id=article.column_id)
# 输出栏目名称
column.column
那怎么反查某个栏目下有多少文章呢?
# 查询出叫django的栏目
column = ArticleColumn.objects.get(column='django')
# 通过column这个实例.article_column.all(),查询出该栏目下的所有文章,article_column就是在ArticlePost模型中的related_name的值
column.article_column.all()
# 反查django这个栏目下title中包含'list'字符串的文章
column.article_column.filter(title__contains='list')
Django:model中的ForeignKey理解的更多相关文章
- Django model中 双向关联问题,求帮助
Django model中 双向关联问题,求帮助 - 开源中国社区 Django model中 双向关联问题,求帮助
- Django model 中的 class Meta 详解
Django model 中的 class Meta 详解 通过一个内嵌类 "class Meta" 给你的 model 定义元数据, 类似下面这样: class Foo(mode ...
- Django文档——Model中的ForeignKey,ManyToManyField与OneToOneField
关联关系字段 (Relationship fields) ForeignKey,ManyToManyField与OneToOneField分别在Model中定义多对一,多对多,一对一关系. 例如,一本 ...
- Django文档——Model中的ForeignKey,ManyToManyField与OneToOneField 关联关系字段 (Relationship fields)
ForeignKey,ManyToManyField与OneToOneField分别在Model中定义多对一,多对多,一对一关系. 例如,一本书由一家出版社出版,一家出版社可以出版很多书.一本书由多个 ...
- Django model 中的字段解释
Django 通过 models 实现数据库的创建.修改.删除等操作,本文为模型中一般常用的类型的清单,便于查询和使用: AutoField:一个自动递增的整型字段,添加记录时它会自动增长.你通常不需 ...
- Django model 中meta options
之前学了abstract,这是后续的一些options app_label: app_label的作用是:如果一个model定义不在INSTALLED_APPS中,那么此时就需要声明,这个model的 ...
- Django model 中meta options之 abstract
当abstract=True时,这个model就变成了abstrct base class,那这个基类有什么特性呢? 当某一model中设置了abstract=True时,就会使该model中的字段都 ...
- Django model中的save后的return
先给结论吧:在Django model的操作函数中,obj.save()后再执行return obj会返回obj的ID. 看例子: ... def create_session(self,bind_h ...
- Django model 中设置联合约束和联合索引
来自:https://blog.csdn.net/ding_312/article/details/81264910 class Cart(models.Model): user = models.F ...
随机推荐
- HttpURLConnection 返回汉字乱码(全是问号)
public static String doPost(String urlStr, Map<String, Object> paramMap) throws Exception { UR ...
- js中将斜杠\替换的方法
js中将/替换的方法replace(/\//g, '-') 中间涉及到js的一些转义问题,试了几个方法,发现这个可以,就记下来.
- ubuntu samba共享后windows读写文件都是以nogroup问题
添加smb账号 sudo smbpasswd -a xxx 如果报错:Failed to add entry for user xxx 则是因为这个账号不存在 添加成功以后,过一会就可以重新登陆了(u ...
- css的基础用法之标签选择
一.css的4种引入方式 #.内联式 <p style="color: red;font-size: 50px;text-align: center">Egon是一个非 ...
- kbmmw 中简单返回 extjs 数据JSON
以前,我们通过自己写json 来返回数据表的内容.在delphi 10.2.2中,官方自带了一个FDBatchMoveJSONWriter1 来直接处理数据库内容.把结果推送到浏览器客户端. 今天我们 ...
- Java基本语法实验报告
题目: Java基本语法 课程名称: JAVA语言程序设计 班 级: 信1705-1 姓 名: 刘雨馨 学号: 20173445 指导教师: ...
- PHP 正则表达式--转(川山甲)
思维导图 点击下图,可以看具体内容! 介绍 正则表达式,大家在开发中应该是经常用到,现在很多开发语言都有正则表达式的应用,比如javascript,java,.net, ...
- 纯css实现蒙层loading效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SpringBoot2.0.2 Application调用的三种方式
一.注解 @SpringBootApplication 点开查看源码是由多个注解合成的注解,其中主要的注解有: @SpringBootConfigurati ...
- 研究生flag
是时候定个计划了,感觉日子一天天水,不加油学点东西,迟早要掉队…… 刷刷算法题库吧,貌似选几个管用的刷刷——https://hihocoder.com/problemset 争取明年三月份的PAT顶级 ...