【问题标题】:Syntax to reverse-query a cached queryset反向查询缓存查询集的语法
【发布时间】:2021-07-11 22:37:51
【问题描述】:

我有以下 3 个与外键相关的模型:

class Seller(models.Model):
    name = models.CharField(max_length=20)

    def __str__(self):
        return self.name

class Genre(models.Model):
    seller= models.ForeignKey(Seller, related_name="genre",  on_delete=models.CASCADE)
    name = models.CharField(max_length=20)

    def __str__(self):
        return self.name


class Book(models.Model):
    genre= models.ForeignKey(Genre, related_name="book",  on_delete=models.CASCADE)
    name = models.CharField(max_length=20)

    def __str__(self):
        return self.name


我想通过查询卖方对象在一个数据库查询中检索整个 3 个表,如下所示:

sellers = Seller.objects.select_related('genre', 'book').all().values('name')
seller_df = pd.DataFrame(list(sellers))

在不再次访问数据库的情况下过滤特定卖家携带的书籍的语法是什么(通过使用Seller 查询集或熊猫seller_df

seller1 = seller_df ['name'].iloc[0]
seller1_books = Book.objects.filter(...)

seller_last = seller_df ['name'].iloc[-1]
seller_last_books = Book.objects.filter(...)

【问题讨论】:

    标签: django


    【解决方案1】:

    我不太了解缓存,但我知道你喜欢的东西:

    我们使用select_related 当对象是单一的,比如onetoone 或fk。 . 对于多对多或反向 fk,例如您的示例,请使用 prefetch_related

    【讨论】:

    • 这是一个链式外键关系。 Seller 是顶层。当我使用select_related('genre', 'book') 时,它会检索所有 3 级查询集。现在我正在寻找如何从Seller 对象中获取Book 对象(通过数据框或查询集本身)。
    • 阅读这个article可以帮助你
    猜你喜欢
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    相关资源
    最近更新 更多