嗨,我只是想知道这是否可以通过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层实现。