怎么理解foreignkey

图标

豆瓜

豆瓜网

豆瓜网专栏

首发
豆瓜 图标 2020-07-24 08:59:26

有两个数据模型栏目模型和文章模型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


本文由豆瓜网专栏作家 豆瓜 投稿发布,并经过豆瓜网编辑审核。

转载此文章须经作者同意,并附上出处(豆瓜网)及本页链接。

若稿件文字、图片、视频等内容侵犯了您的权益,请联系本站进行 投诉处理

相关搜索

foreignkey
图标 图标

豆瓜

豆瓜网

豆瓜网专栏

  • 怎么理解foreignkey

    图标
    豆瓜 图标 · 今天 08:59:26 · 0浏览
  • qgraphicsscene详解

    图标
    豆瓜 图标 · 今天 08:58:13 · 10浏览
  • table边框增加说明

    图标
    豆瓜 图标 · 今天 08:57:39 · 4浏览
  • 全部评论

    豆瓜

    豆瓜网

    豆瓜网专栏

  • 怎么理解foreignkey
  • qgraphicsscene详解
  • table边框增加说明
  • transactionscope方法和原理详解
  • sessionscope获取session值
  • 我来说两句