如何解决django 过滤器让父级到子级
我正在使用 django(3.1.5)。我正在尝试通过过滤查询将父模型转换为子模型 我有这样的模型 -
class Product(models.Model):
product_name = models.CharField(max_length=255,unique=True)
is_feature = models.BooleanField(default=False)
is_approved = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
class ProductGalleryImage(models.Model):
product = models.ForeignKey(Product,on_delete=models.CASCADE)
product_gallery_image = models.FileField(upload_to='path')
is_feature = models.BooleanField(default=False)
我正在从 SELECT * FROM products_product AS pp INNER JOIN products_productgalleryimage AS ppgi ON ppgi.product_id = pp.id WHERE ppgi.is_feature=1 AND pp.is_feature=1 AND is_approved=1 ORDER BY pp.created_at LIMIT 4
mysql 查询中获取数据。
那么我怎样才能在 django 过滤器查询中获得这样的数据
解决方法
首先,您可以将 related_name
添加到 ProductGalleryImage 以获得更好的查询支持
product = models.ForeignKey(Product,on_delete=models.CASCADE,related_name='product_images')
那么你的查询应该是这样的
products=Product.objects.filter(is_approved=True,is_feature=True,product_images__is_feature=True).order_by('created_at')[:4]
,
您可以像这样简单地循环其他相关模型:
for product_gallery_image in product_instance.productgalleryimage_set.all():
print(product_gallery_image.product_gallery_image)
此处的 productgalleryimage_set
只是小写的相关模型名称,并附加了 _set。您可以通过在外键上设置 related_name
属性来更改此设置。
注意:这将执行查询以获取某个产品实例的每个 product_gallery_image 对象。
如果您只想获取第一个对象:
product_gallery_image = product_instance.productgalleryimage_set.first()
如果您想在您的示例中执行一个仅执行一个查询的连接,您可以使用 select_related
(这仅适用于正向查看 prefetch_related):>
product_gallery_images = ProductGalleryImage.objects.all().select_related('product')
for product_gallery_image in product_gallery_images:
print(product_gallery_image.product.product_name)
print(product_gallery_image.product_gallery_image)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。