有两个数据模型栏目模型和文章模型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理解的更多相关文章

  1. Django model中 双向关联问题,求帮助

    Django model中 双向关联问题,求帮助 - 开源中国社区 Django model中 双向关联问题,求帮助

  2. Django model 中的 class Meta 详解

    Django model 中的 class Meta 详解 通过一个内嵌类 "class Meta" 给你的 model 定义元数据, 类似下面这样: class Foo(mode ...

  3. Django文档——Model中的ForeignKey,ManyToManyField与OneToOneField

    关联关系字段 (Relationship fields) ForeignKey,ManyToManyField与OneToOneField分别在Model中定义多对一,多对多,一对一关系. 例如,一本 ...

  4. Django文档——Model中的ForeignKey,ManyToManyField与OneToOneField 关联关系字段 (Relationship fields)

    ForeignKey,ManyToManyField与OneToOneField分别在Model中定义多对一,多对多,一对一关系. 例如,一本书由一家出版社出版,一家出版社可以出版很多书.一本书由多个 ...

  5. Django model 中的字段解释

    Django 通过 models 实现数据库的创建.修改.删除等操作,本文为模型中一般常用的类型的清单,便于查询和使用: AutoField:一个自动递增的整型字段,添加记录时它会自动增长.你通常不需 ...

  6. Django model 中meta options

    之前学了abstract,这是后续的一些options app_label: app_label的作用是:如果一个model定义不在INSTALLED_APPS中,那么此时就需要声明,这个model的 ...

  7. Django model 中meta options之 abstract

    当abstract=True时,这个model就变成了abstrct base class,那这个基类有什么特性呢? 当某一model中设置了abstract=True时,就会使该model中的字段都 ...

  8. Django model中的save后的return

    先给结论吧:在Django model的操作函数中,obj.save()后再执行return obj会返回obj的ID. 看例子: ... def create_session(self,bind_h ...

  9. Django model 中设置联合约束和联合索引

    来自:https://blog.csdn.net/ding_312/article/details/81264910 class Cart(models.Model): user = models.F ...

随机推荐

  1. How to ignore files and directories in subversion?

    Step 1 Copy the files and directories to other place. Step 2 Delete the files and directories. Step ...

  2. RSS工具关注期刊,方便快速获取及时大量的文献信息

    第一步: 第二步: 第三步: RSS : 很好的一个东西,到了中国,咋就水土不服了呢...

  3. 2017/2/14:JSTL标签与el表达式

    一.JSTL标签介绍 1.什么是JSTL? JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL标签使用以来非常方便,它与JSP动作标签一样,只不过它不是 ...

  4. spring学习 十三 注解AOP

    spring 不会自动去寻找注解,必须告诉 spring 哪些包下的类中可能有注解,也就是要开启注解扫描,注解的包是spring-context.jar,所以在配置文件中还要引入context约束,也 ...

  5. Desktop Central帮助您升级Windows 10,获取更新的五大增强功能

  6. android开发笔记(1)

    最近老师要求我们使用android开发一些东西.但是对我们而言,android是一个未知的方面.先说说我对于android的软件的基本认识,首先他很难,因为他是一个未知的领域:其次,我们只是掌握了一些 ...

  7. dblink(转)

    oracle在进行跨库访问时,可以通过创建dblink实现,今天就简单的介绍下如果创建dblink,以及通过dblink完成插入.修改.删除等操作 首先了解下环境:在tnsnames.ora中配置两个 ...

  8. 使用Spring 简化MyBatis

    1.导入mybatis所有的jar 和 spring 基本包,spring-jdbc,spring-tx,spring-aop,spring整合mybatis的包等. 2.编写spring配置文件ap ...

  9. FMS4.5( Adobe Flash Media Server4.5)流媒体服务器搭建

    下载FMS4.5 下载地址:http://pan.baidu.com/s/1pJLi5Ur(已更新) FMS是用于用户之间相互通讯的新平台.它集成了Flash多媒体交互的特性,又添加了实时音频和实时数 ...

  10. 蓝绿部署、红黑部署、AB测试、灰度发布、金丝雀发布、滚动发布的概念与区别(转)

    出处:https://www.baidu.com/link?url=QjboallwNm_jxcL3fHG57wEakiBfAs_3-TChTGu1eBXstlHEsGBc-NDA7AKTqsiroB ...