我有两个模型:
Model Student:
name = models.CharField()
..... ....
wishlist = models.ManyToManyField(University, blank=True)
Model University:
name = models.CharField()
...... . .. . . . .
基本上我只是创建一个用户可以喜欢的大学的愿望清单,然后将其添加到他们的愿望清单中!(我通过心形图标表达了这一点),因此当用户重新单击同一项目时,它会将其从心愿单中删除,就是这样!
问题是,如何检查用户是否喜欢某所大学?
这是我的代码:
def index(request):
univesity = University.objects.filter(is_approved=True)
context = {'univesity': univesity}
return render(request, 'search/index.html', context)
以上是我为搜索目的获取所有大学的地方!在此我需要检查用户是否已将大学添加到愿望清单关系中。如果它是真的,那么心形图标将变成红色,否则为空颜色!
现在这就是我在模板上的显示方式
{% if data.student_set.all %}
<button><em class="icon ni ni-heart-fill" ></em></button>
{% else %}
<button><em class="icon ni ni-heart"></em></button>
{% endif %}
它不像我预期的那样工作!请指导
您可以通过Universities
使用Exists
子查询 [Django-doc]注释来检查该人是否喜欢一所大学:
from django.contrib.auth.decorators import login_required
from django.db.models import Exists, OuterRef
@login_required
def index(request):
universities = University.objects.annotate(
liked=Exists(Student.wishlist.through.objects.filter(
student=request.user, university_id=OuterRef('pk')
))
).filter(is_approved=True)
context = {'universities': universities}
return render(request, 'search/index.html', context)
如果Student
是用户模型。如果不是这种情况,您首先应该获取登录的用户,并在.filter(student=…, …)
部分中使用它。
然后我们可以在模板中渲染它:
{% for university in universities %}
{{ university }}
{% if university.liked %}
<button><em class="icon ni ni-heart-fill" ></em></button>
{% else %}
<button><em class="icon ni ni-heart"></em></button>
{% endif %}
{% endfor %}
注意:您可以使用
@login_required
装饰器 [Django-doc]将视图限制为经过身份验证的用户的视图。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句