Как отфильтровать данные модели Django с использованием зарегистрированных пользователей с несколькими объектами - PullRequest
0 голосов
/ 14 июля 2020

Я новичок в Django и пытаюсь понять, как фильтровать данные, используя вошедших в систему пользователей с несколькими объектами.

Когда пользователь вошел в систему, он должен иметь возможность видеть книгу автором которого является он, а также он является соавтором некоторых книг.

Models.py

class Book(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    co_authors = models.ManyToManyField(User, related_name='co_authored_by')

views.py

@login_required()
def booklist(request):
    book=Book.objects.filter(author =request.user, co_authors =request.user)
    context = {
        'book':book
    }
    return render(request, "contracts/booklist.html", context)

Пробовал использовать Q и / или logi c не смог передать оба фильтра в шаблон.

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Вы должны использовать Q для сложных поисков, в этом случае вам понадобится и OR (|) оператор

from django.db.models import Q

...
book=Book.objects.filter(Q(author=request.user) | Q(co_authors=request.user))
...

Вы можете взглянуть на docs .

0 голосов
/ 14 июля 2020

Вы также можете использовать {% if user.is_authenticated%} в шаблоне.

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