如何在django中获取条件下的子对象

p4tfgftt  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(237)

我正试图从父母的模型中提取数据到满足条件的孩子模型中。我有一个产品模型,还有一个产品评论模型。因此,我需要从一个产品模型中获取记录,以审查评级为1的模型。

class Product(models.Model):
    name = models.CharField(max_length=250)
    code = models.IntegerField(unique=True)
    ...

class Review(models.Model):
    name = models.CharField(max_length=250)
    rating = models.IntegerField(default=1)
    message = models.TextField(max_length=2000)
    ...

输出:-从所有产品模型中获得评级为1的评论。就像这个mysql查询

SELECT * FROM product_product as product INNER JOIN product_productreviews as review ON product.id = review.product_id WHERE review.rating = 1.0
4ktjp1zp

4ktjp1zp1#

您可以添加属性(例如。 reviews_with_rating_of_one )给你 Product 模型如下:

class Product(models.Model):
    name = models.CharField(max_length=250)

    @property
    def reviews_with_rating_of_one(self):
        return Review.objects.filter(product=self, rating=1)

class Review(models.Model):
    rating = models.IntegerField(default=1)
    product = models.ForeignKey(Product, on_delete=models.CASCADE)

注意:如果您想循环所有产品和访问 reviews_with_rating_of_one 属性,则上述解决方案不是非常有效,因为它将对每个产品进行额外的数据库查询(以检索评论)。如果你想要的只是所有的评论 rating 等于 1 以及相关产品的详细信息,则以下内容适用于您:

Review.objects.select_related("product").filter(rating=1)

相关问题