obj.authors.all()不显示任何内容

时间:2019-06-02 07:00:31

标签: python django django-models many-to-many

我正在尝试使用最新版本的django创建django站点,但是当我使用obj.authors.all()时,它什么也不会返回。

我尝试摆脱all(),但返回空的Queryset。

views.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)])

models.py

{{1}}

我希望它能返回作者,但什么也不会返回。 对不起,如果有重复。还有一个问题,我可以显示由特定作者或在这种情况下的用户编写的所有书籍吗?

3 个答案:

答案 0 :(得分:0)

您可以尝试:

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

假设您要显示由特定作者撰写的书,那么在这种情况下,您的查询应该是:

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

您还可以根据自己的情况使用get

假设您的User模型具有用户名字段。

答案 1 :(得分:0)

我认为您发送的上下文错误,因此请尝试以下操作:

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 %}

答案 2 :(得分:0)

您正在覆盖变量

首先与

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

您要将将从数据库中检索到的Book对象分配给obj变量。

然后与

obj = obj.authors.all()

您再次将作者分配给obj,然后返回作者,这是一个不存在的变量。 您的命名似乎令人困惑。 如果您希望ID为1的书的作者,可以执行以下操作:

authors = Book.objects.filter(id=1).authors.all()