obj.authors.all () ничего не показывает - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь сделать сайт django в последней версии django, но когда я использую obj.authors.all (), он ничего не возвращает.

Я пытался избавиться от всего () но возвращает пустой Queryset.

views.py

 def menu(request):
        obj = Book.objects.get(id=1)
        obj = obj.authors.all()
    else:
        obj=""
    return render(request, 'menu.html', 
 {'obj':obj,'numautgors':authors})

models.py

class Book(models.Model):
    name = models.CharField(max_length=100,unique=True)
    authors = models.ManyToManyField(User)
    text = models.TextField(unique=True)
    def __str__(self):
        return self.name
    def get_absolute_url(self):
        return reverse('model-detail-view', args=[str(self.id)])

Я ожидаюэто вернуть авторам, но ничего не возвращает.Извините, если дубликат.И еще один вопрос, могу ли я показать всю книгу, написанную конкретным автором или в данном случае пользователем?

Ответы [ 3 ]

0 голосов
/ 02 июня 2019

Я думаю, что вы отправляете неверный контекст, поэтому попробуйте так:

def menu(request):
        obj = Book.objects.get(id=1)
        authors = obj.authors.all()
        return render(request, 'menu.html', {'obj':obj,'numautgors':authors})

В качестве альтернативы вы можете напрямую показать авторов в шаблоне (вам вообще не нужно передавать авторов в шаблон с контекстом):

{% for author in obj.authors.all %}
    {{ author.id }}
{% endfor %}
0 голосов
/ 02 июня 2019

Вы перезаписываете свои переменные

Сначала с

obj = Book.objects.get(id=1)

Вы назначаете объект Book, полученный из базы данных, переменной obj.

Затем с

obj = obj.authors.all()

Вы снова назначаете авторов для obj, а затем возвращаете авторов, переменную, которая не существует. Ваше наименование кажется запутанным. Если вы хотите, чтобы авторы книги с идентификатором 1, вы могли бы сделать это:

authors = Book.objects.filter(id=1).authors.all()
0 голосов
/ 02 июня 2019

Вы можете попробовать:

Books.objects.all().values('authors')

И предположим, что вы хотите показать книгу, написанную конкретным автором, тогда в этом случае ваш запрос должен быть:

Books.objects.filter(authors__username=request.user.username) 

, также вы можете использоватьget в зависимости от вашего сценария

Предполагается, что ваша модель User имеет поле имени пользователя.

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