You cannot execute simple django requests. This is a many, many ship relationship, you can even refine it by doing something like this:
class Item(models.Model):
votes = models.ManyToManyField(User, through='ItemVote', related='votedItems')
In a Many-to-Many relationship, we can talk about related sets (because there are several objects). While django can filter on related sets, something like:
Item.objects.filter(votes=request.user)
, . , .votes , , . , .
django- Item :
class Item(models.Model):
votes = models.ManyToManyField(User, through='ItemVote', related='votedItems')
def markVoted(self, user):
self.voted = user in self.votes
. , ( , select_related - ).
- SQL :
Item.objects.extra('voted' : 'SELECT COUNT(*) FROM app_itemvote WHERE app_itemvote.item_id = app_item.id AND app_itemvote.user_id=%d'%request.user.pk)