ManyToMany 字段未显示在模板中的 if 语句中
ManyToMany fields are not showing in if statement in template
我正在构建一个 BlogApp,但遇到了一个问题。
我正在尝试做什么:-
我正在尝试在 two many fields
的模板中使用 if statement
,但是 if
语句无法正常工作。
models.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE,default='',unique=True)
friends = models.ManyToManyField("Profile",blank=True)
class Post(models.Model):
post_owner = models.ForeignKey(User,default='',null=True,on_delete = models.CASCADE)
viewers = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='viewed_posts',editable=False)
views.py
def detail_view(request,pk,slug):
post = get_object_or_404(Post,pk=pk)
friend = request.user.profile.friends.all()
saw = post.viewers.all()
context = {'friend':friend,'saw':saw}
template.html
{% if request.user.profile.friends.all in post.viewers.all %}
"SHOWING SOME TEXT"
{% endif %}
I am trying to show if request.user friends
are in post viewers
then show some text.
当我打印 {{ request.user.profile.friends.all }}
它显示 request.user 的朋友时,它工作正常。
并且当我打印 {{ post.viewers.all }}
然后它正确显示 post 观众(用户)。
当我尝试在 if
语句中合并两者后打印一些文本时,它没有显示任何内容。
我不知道错误在哪里。
如有任何帮助,我们将不胜感激。
提前致谢。
问题出在这一行
{% if request.user.profile.friends.all in post.viewers.all %}
更新:
模板可以访问 request.user 对象,但不能访问配置文件对象。您正在尝试在模板中应用 Django ORM 方法,它不会起作用。
def detail_view(request,pk,slug):
# some code
profile = Profile.objects.get(user=request.user)
context = {'profile':profile}
# more code
return render(request, template_file, context)
您可以filter
在视图中:
def detail_view(request,pk,slug):
post = get_object_or_404(Post,pk=pk)
friend = request.user.profile.friends.all()
saw = post.viewers.all()
<b>seen_friends = post.viewers.filter(
id__in=friend.values_list("user_id")
).exists()</b>
context = {
'friend':friend,'saw':saw,
'seen_friends':seen_friends
}
在template.html中:
{% if seen_friends %}
"SHOWING SOME TEXT"
{% endif %}
我正在构建一个 BlogApp,但遇到了一个问题。
我正在尝试做什么:-
我正在尝试在 two many fields
的模板中使用 if statement
,但是 if
语句无法正常工作。
models.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE,default='',unique=True)
friends = models.ManyToManyField("Profile",blank=True)
class Post(models.Model):
post_owner = models.ForeignKey(User,default='',null=True,on_delete = models.CASCADE)
viewers = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='viewed_posts',editable=False)
views.py
def detail_view(request,pk,slug):
post = get_object_or_404(Post,pk=pk)
friend = request.user.profile.friends.all()
saw = post.viewers.all()
context = {'friend':friend,'saw':saw}
template.html
{% if request.user.profile.friends.all in post.viewers.all %}
"SHOWING SOME TEXT"
{% endif %}
I am trying to show if
request.user friends
are inpost viewers
then show some text.
当我打印
{{ request.user.profile.friends.all }}
它显示 request.user 的朋友时,它工作正常。并且当我打印
{{ post.viewers.all }}
然后它正确显示 post 观众(用户)。
当我尝试在 if
语句中合并两者后打印一些文本时,它没有显示任何内容。
我不知道错误在哪里。
如有任何帮助,我们将不胜感激。
提前致谢。
问题出在这一行
{% if request.user.profile.friends.all in post.viewers.all %}
更新:
模板可以访问 request.user 对象,但不能访问配置文件对象。您正在尝试在模板中应用 Django ORM 方法,它不会起作用。
def detail_view(request,pk,slug):
# some code
profile = Profile.objects.get(user=request.user)
context = {'profile':profile}
# more code
return render(request, template_file, context)
您可以filter
在视图中:
def detail_view(request,pk,slug):
post = get_object_or_404(Post,pk=pk)
friend = request.user.profile.friends.all()
saw = post.viewers.all()
<b>seen_friends = post.viewers.filter(
id__in=friend.values_list("user_id")
).exists()</b>
context = {
'friend':friend,'saw':saw,
'seen_friends':seen_friends
}
在template.html中:
{% if seen_friends %}
"SHOWING SOME TEXT"
{% endif %}