如何反向检查对象是否存在于多对多 django 中?
How to reverse check if object exisit in many to many django?
我有两个模型:
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 %}
它没有像我预期的那样工作!请指导
您可以通过用 Exists
subquery [Django-doc] 注释 Universities
来检查那个人是否喜欢大学:
from django.contrib.auth.decorators import login_required
from django.db.models import Exists, OuterRef
@login_required
def index(request):
universities = University.objects.annotate(
<strong>liked=Exists(</strong>Student.wishlist.through.objects.filter(
student=request.user, university_id=OuterRef('pk')
<strong>))</strong>
).filter(is_approved=True)
context = {'universities': universities}
return render(request, 'search/index.html', context)
如果Student
是用户模型。如果不是这种情况,您首先应该获取登录用户,并在 .filter(student=…, …)
部分使用它。
然后我们可以在模板中渲染它:
{% for university in universities %}
{{ university }}
{% <strong>if university.liked</strong> %}
<button><em class="icon ni ni-heart-fill" ></em></button>
{% else %}
<button><em class="icon ni ni-heart"></em></button>
{% endif %}
{% endfor %}
Note: You can limit views to a view to authenticated users with the
@login_required
decorator [Django-doc].
我有两个模型:
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 %}
它没有像我预期的那样工作!请指导
您可以通过用 Exists
subquery [Django-doc] 注释 Universities
来检查那个人是否喜欢大学:
from django.contrib.auth.decorators import login_required
from django.db.models import Exists, OuterRef
@login_required
def index(request):
universities = University.objects.annotate(
<strong>liked=Exists(</strong>Student.wishlist.through.objects.filter(
student=request.user, university_id=OuterRef('pk')
<strong>))</strong>
).filter(is_approved=True)
context = {'universities': universities}
return render(request, 'search/index.html', context)
如果Student
是用户模型。如果不是这种情况,您首先应该获取登录用户,并在 .filter(student=…, …)
部分使用它。
然后我们可以在模板中渲染它:
{% for university in universities %}
{{ university }}
{% <strong>if university.liked</strong> %}
<button><em class="icon ni ni-heart-fill" ></em></button>
{% else %}
<button><em class="icon ni ni-heart"></em></button>
{% endif %}
{% endfor %}
Note: You can limit views to a view to authenticated users with the
@login_required
decorator [Django-doc].