0

这大致是我的模型:

class Image(models.Model):
  url = models.CharField(max_length=255)
  title = models.CharField(max_length=255, blank=True, null=True)

class Favorite(models.Model):
  user = models.ForeignKey(User, related_name="favorites")
  image = models.ForeignKey(Image, related_name="favorited")

我正在显示一堆图像,用户可以将图像添加到他们的收藏夹中。如果当前用户在他的收藏夹中有它,我想在每张图像旁边显示一个星号。我可以通过使用raw然后在 SQL 中发出左连接来做到这一点,但我更愿意在不执行原始 SQL 的情况下做到这一点。有什么办法可以使用extra吗?

4

1 回答 1

1

无需任何额外的 sql,您只需查询相关表以查看是否存在如下内容:\

images = Image.objects.all().prefetch_related('favorited')
for image in images:
    image.favorited = image.favorited.filter(user=current_user).exists()

然后您可以在模板中查看 image.favorited。

我认为更简洁的方法是使用.extra()一点 sql。像这样的东西:

image.objects.extra(select={'favorited': 'EXISTS(SELECT * FROM app_favorite WHERE image_id = app_image.id AND user_id = %s)'}, select_params=[current_user.pk])
于 2013-11-06T23:34:23.597 回答