Django ORM中具有唯一组合的反向关系(ForeignKey)

Django ORM中具有唯一组合的反向关系(ForeignKey),django,django-models,django-related-manager,Django,Django Models,Django Related Manager,嗨,我只是想知道通过Django ORM这是否可行: 请忽略模型名称等,它们不是真实的 class Image(models.Model): ... item = models.ForeignKey(Bag, related_name="images") flag_frontpage_image = models.BooleanField() imagefile = models.ImageField(upload_to="items/%m/%Y") ..

嗨,我只是想知道通过Django ORM这是否可行:

请忽略模型名称等,它们不是真实的

class Image(models.Model):
    ...
    item = models.ForeignKey(Bag, related_name="images")
    flag_frontpage_image = models.BooleanField()
    imagefile = models.ImageField(upload_to="items/%m/%Y")
    ...


class Item(models.Model):
    ...
在views.py中:

class LandingPageView(SomeMixin,SomeOtherMixin,ListView):
                ....
    def get_context_data(self, **kwargs):
        context = super(LandingPageView, self).get_context_data(**kwargs)
        context['items'] = Item.objects.prefetch_related('images').order_by('?').all()[:10]
        return context
这是好的,工作正常,我想实现的是,我想在视图中获取一个查询,应用一个连接到图像中。 LandingPageView显示带有标记为frontpage图像的图像的项目列表,Django指出(正确地说是SQL)不可能使用反向选择,因为项目可以有多个图像,但是…一个项目只能有一个frontpage图像。 我知道在重构方面还有其他方法可以实现这一点,目前由于我更喜欢避免分区模型,所以我采用了混合方式:

class GetFeaturedMixin(object):
    @property
    def featured_image(self):
        if self.images.count > 0:
            for image in self.images.all():
                if image.flag_frontpage_image == 1:
                    return image.imagefile


class Item(models.Model, GetFeaturedMixin):
    ...
然后在视图中:

<img src="{{ item.featured_image }}">

这很好,但我想知道是否有办法通过Django关系查询集在单个查询集中获取整个集合。
请不要回答或询问原始查询,我知道它们确实存在,甚至在这种类型上也使用过它们,我只是想知道是否可以通过ORM层实现上述功能

self.images.filter(flag_frontpage_image=True)
显然比pythonical迭代所有这些内容要好。但这会创建额外的查询,因为这是一个反向查找,这就是为什么我使用上述方法迭代它们,因为与初始预取相关的内容会获取项目的所有图像。我将再次检查以确保thoughChecked,我会为每个调用特征图像的调用获得1个额外的查询,因此与迭代相比不是首选的。我忘记了预取。至于这个问题,我想不出一个设计,你正在做的查询可以通过ORM获得,因为它是一个条件或计算