Django中如何判断模型记录是否在另一模型列表并显示标识
嘿,这问题其实挺常见的,我来给你捋清楚怎么写这个判断条件!
首先咱们得先把视图里的参数传对,这样前端模板才能顺利判断。推荐你在视图里把当前用户拥有的专辑ID整理成一个纯列表传给模板,这样对比起来效率最高:
第一步:调整视图代码
假设你的关联模型叫UserAlbum(用来关联用户和专辑),那视图里可以这么写:
from django.shortcuts import render from .models import Album, UserAlbum def album_list(request): # 获取所有专辑 all_albums = Album.objects.all() # 提取当前用户拥有的所有专辑ID,flat=True让结果是一个纯整数列表 my_album_ids = UserAlbum.objects.filter(user=request.user).values_list('album_id', flat=True) # 把两个变量传给模板 return render(request, 'albums/list.html', { 'all_albums': all_albums, 'my_album_ids': my_album_ids })
第二步:模板里写判断条件
接下来在前端模板里,你只需要用Django的模板标签判断当前专辑的ID是否在my_album_ids列表里就行了,这就是你要找的SOME_CONDITION:
{% for album in all_albums %} <div class="album-card"> <h4>{{ album.name }}</h4> <!-- 这里就是核心判断条件 --> {% if album.id in my_album_ids %} <!-- 显示已拥有的小图标,这里用 emoji 举例,你也可以替换成 img 标签引入自定义图标 --> <span class="owned-icon">✅</span> {% endif %} </div> {% endfor %}
备选方案:直接对比专辑对象
如果你在视图里传的是用户拥有的专辑对象集合(比如my_albums = Album.objects.filter(useralbum__user=request.user)),那模板里也可以直接这么写:
{% if album in my_albums %} <!-- 显示图标 --> {% endif %}
不过这种方式是对比整个对象,当专辑数量比较多的时候,效率会比对比ID低一些,所以更推荐第一种用ID列表的方式。
这样就能完美实现“用户拥有的专辑显示小图标”的需求啦!
内容的提问来源于stack exchange,提问作者user585936
相关产品推荐
相关产品推荐

