嗨,我只是想知道这是否可以通过 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 只能有一个首页图片。我知道在重构方面还有其他方法可以实现这一点,目前因为我更喜欢避免分区模型,所以我遵循一种混合方式:
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 层实现。