набор запросов django: выберите соединение с auth_user - PullRequest
0 голосов
/ 09 апреля 2009

Это, вероятно, довольно интересный вопрос, но я не могу заставить его работать.

Если у меня есть следующая модель:

from django.contrib.auth.models import User

class Entry(models.Model):
    title = models.CharField()
    users = models.ManyToManyField(User)

Как я могу получить список всех записей-записей текущего пользователя? Что-то вроде:

list = Entry.objects.filter(users__????__contains = request.user)   

Заранее благодарим за помощь в продвижении.

Ответы [ 4 ]

3 голосов
/ 09 апреля 2009

От вершины моей головы, я полагаю, что это может быть в духе:

list = Entry.objects.filter(users__id__exact = request.user.pk)

или

list = Entry.objects.filter(users = request.user)

Я считаю, что любой из них должен работать. Для получения дополнительной информации о отношениях «многие ко многим» посмотрите документы Django.

2 голосов
/ 09 апреля 2009

Я считаю следующее более элегантным, но это зависит от вас.

request.user.entry_set.all()

РЕДАКТИРОВАТЬ: вам не нужно импортировать класс модели Entry каждый раз, когда вы хотите найти записи, связанные с пользователем. Использование user.entry_set позволяет избежать этой проблемы.

1 голос
/ 09 апреля 2009
Entry.objects.filter(users=request.user)

И в вашем коде есть ошибка. CharField требуется max_length .

1 голос
/ 09 апреля 2009

Вы должны быть в состоянии сделать это с:

Entry.objects.filter(users=request.user)

Django отсортирует правильное соединение с таблицей M2M и добавит предложение WHERE, ограничивающее его для текущего пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...