django orm正、反向查询

先看结论:

正向查询反向查询
概念由多方查询一方由一方查询多方
语法多方的某个对象.外键字段一方对象.模型类名字小写形式_set.all()
举例city.parentp.area_set.all()

如果外键字段添加了related_name=abcdefg

语法:一方对象.abcdefg.all()

举例:p.abc.all()

讲解部分:

首先准备AuthorArticle两个模型:

from django.db import models

class Author(models.Model):
    """作者 (一方)"""
    name = models.CharField(max_length=100)

class Article(models.Model):
    """文章 (多方)"""
    title = models.CharField(max_length=200)
    content = models.TextField()
    author = models.ForeignKey(Author, on_delete=models.CASCADE,related_name='articles')

# 正向查询:获取某篇文章的作者
article = Article.objects.get(id=1)  # 假设我们通过id获取一篇文章
author = article.author  # 获取这篇文章的作者

# 反向查询:获取某个作者的所有文章
author = Author.objects.get(name='John Doe')  # 假设我们通过名字获取一个作者
articles = author.articles.all()  # 获取这个作者的所有文章

这里的Article模型中的author字段定义了一个外键关系,指向Author模型。一个作者可以写多篇文章

正向查询:多方:one_article = Article.objects.get(id=1)

                  一方:author = one_article.author 

反向查询:如果我们有一个作者实例 one_author,我们可以通过 one_author.Article_set.all() 来获取这个作者写的所有文章。

一方: one_author = Author.objects.get(name='John Doe')

多方: article = one_author.Article_set.all()  ("当没有related_name = '' " 时")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值