我正在尝试使用最新版本的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}}
我希望它能返回作者,但什么也不会返回。 对不起,如果有重复。还有一个问题,我可以显示由特定作者或在这种情况下的用户编写的所有书籍吗?
答案 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()