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

时间:2013-12-31 18:12:52

标签: 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")
    ...


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

这没关系,工作正常,我想要实现的是我希望在视图中获取1个查询,应用图像连接井。 LandingPageView显示一个项目列表,其中的图像被标记为首页图像,因为Django声明(并且正确地说SQL)反向select_related是不可能的,因为Item可以有很多图像,但是...一个Item只能有一个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层实现。

0 个答案:

没有答案