django 选择 * 进行反向查找

von4xj4u  于 2023-10-21  发布在  Go
关注(0)|答案(2)|浏览(89)

我在Django有三个模型。

class Product(models.Model):
  name = mdoels.CharField()
class ProductCharateristics(models.Model):
  name = models.CharField()
  description = models.TextField()
class ProductCharacteristicValues(models.Model):
  product_characteristic = models.ForeignKey(ProductCharacteristics)
  value = models.IntegerField()
  prduct = models.ForeignKey(Product)

特性列表可能会改变,所有产品都是一样的,每个特性都可以有多个值。
我想用django ORM复制以下SQL语句:

select * from ProductCharateristics as pc left join ProductCharacteristicValues as pcv on pc.id = pcv.product_characteristics where pcv.product = 1

此查询检索两个表中的所有行和所有列。

ghhkc1vu

ghhkc1vu1#

这应该是可行的:

ProductCharacteristics.objects.filter(productcharacteristicvalues_set__product__id=1)
frebpwbc

frebpwbc2#

您可以使用以下命令**.filter(…)**[Django-doc]:

ProductCharateristics.objects.filter(productcharacteristicvalues__product_id=my_product_id)

然而,如果你想要的是带有值的特征,那么查询ProductCharacteristicValue表并从中获取product_characteristic更有意义,所以:

ProductCharacteristicValues.objects.filter(
    product_id=my_product_id
).select_related('product_characteristic')

这将返回ProductCharacteristicValues对象的QuerySet,但是如果您访问.product_characteristic,它将不会进行额外的查询,因为该数据已添加到初始查询中。

相关问题