Не могу понять почему queryset ведет себя именно так.
У меня есть такие модели:
class Lot(models.Model):
...
users_data = models.ManyToManyField(User, through='UserData')
class UserData(models.Model):
user = models.ForeignKey(User, null=True) # auth_user
lot = models.ForeignKey(Lot, null=True)
read = models.BooleanField(default=False)
Хочу получить все объекты Lot, у которых в таблице UserData свойство read = False.
В базе две записи Lot и по одной UserData на каждую Lot (с разными значениями UserData.read).
Lot.objects.filter(users_data__userdata__read=False)
Выдает оба Lots.
SELECT "auction_lot"."id",
...
FROM "auction_lot"
INNER JOIN "auction_userdata" ON ( "auction_lot"."id" = "auction_userdata"."lot_id" )
INNER JOIN "auth_user" ON ( "auction_userdata"."user_id" = "auth_user"."id" )
INNER JOIN "auction_userdata" T4 ON ( "auth_user"."id" = T4."user_id" )
WHERE T4."read" = False
Вопрос наверное в том зачем нужен этот джойн (и как описать правильно фильтр):
INNER JOIN "auction_userdata" T4 ON ( "auth_user"."id" = T4."user_id" )