У меня есть следующая модель:
class ShoppingList(models.Model):
name = models.CharField(max_length=100, default='Main')
owners = models.ManyToManyField(User, through='ListOwner')
class ListOwner(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
shopping_list = models.ForeignKey(ShoppingList, on_delete=models.CASCADE)
is_main_owner = models.BooleanField(default=False)
Далее я пытаюсь запросить ShoppingList
для текущего пользователя. Я использовал это https://docs.djangoproject.com/en/dev/topics/db/models/#extra -поля-на-многих-многих-отношениях в качестве примера.
Я ожидал, что правильный способ сделать это - использовать эту конструкцию:
@login_required
def index(request):
shopping_list = ShoppingList.objects.filter(owners__user=request.user)\
.order_by('id').first()
# something else
но в этом случае я получаю сообщение об ошибке: Related Field got invalid lookup: user
Все работает нормально, если использовать listowner
вместо owner
в filter()
функции, подобной этой:
shopping_list = ShoppingList.objects.filter(listowner__user=request.user)\
.order_by('id').first()
Может кто-нибудь объяснить, почему первый не работает (хотя рекомендуется использовать его в Django документации)?