我有一个网站记录了当地的徒步旅行,用户可以记录他们曾经徒步旅行。我有一个包含徒步旅行的搜索页面,我试图显示的一个字段是所有徒步旅行的人的列表。我已经在hike的个人详细信息页面中了解到了这一点,但是我不知道如何在正在打印hike的queryset中创建一个新的queryset,以便在搜索页面上显示此信息
下面是一些代码:
models.py:
class Hike(models.Model):
name = models.CharField(max_length=255, unique=True)
slug = models.SlugField(unique=True)
...
class UserLog(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
hike = models.ForeignKey(Hike, on_delete=models.CASCADE)
views.py:
def hike_list(request):
qs = Hike.objects.all()
... some other filters here
?-->users = UserLog.objects.filter(id=qs.id)
模板:
{% for qs in qs %}
{{ hike.name }}{{ hike.other_details_and_stuff }}
?----> {% for users in hikes %}{{ user.name }}{% endfor %}
{% endfor %}
以下是个人徒步旅行详细信息页面中的工作代码:
views.py:
def hike_detail (request, slug)
users = UserLog.objects.filter(hike__slug=slug)
如何从queryset中的每个单独项调用slug,然后对其运行queryset
最简单的方法是将
ManyToManyField
添加到Hike
:如果
UserLog
中没有额外的字段,甚至可以一起删除UserLog
模型和through
参数。在模板中,您可以执行以下操作:为了避免过多的查询,您应该在视图的
Hike
查询中预取用户:如果没有
ManyToManyField
,您可以添加一个属性并使用相同的模板,但是prefetch子句不能那么容易地使用:相关问题 更多 >
编程相关推荐