Django比较两个查询集,并基于这些值创建一个列表,为每个项添加额外的数据

Django比较两个查询集,并基于这些值创建一个列表,为每个项添加额外的数据,django,django-models,query-optimization,django-queryset,Django,Django Models,Query Optimization,Django Queryset,我有一个UserProfile模型和一个Friends模型。我在模板中的页面上显示一个配置文件列表,并在显示每个配置文件时标记UserProfile是否是当前用户的朋友 理想情况下,我希望避免在模板上出现嵌套循环,在该循环中,我必须将Friend Queryset与UserProfile Queryset进行比较,以查看是否存在匹配项 我有这样的模型(未显示其他字段): 在视图中,我首先获得所有用户配置文件,然后是当前用户的好友,如下所示: profile_query = UserProfi

我有一个UserProfile模型和一个Friends模型。我在模板中的页面上显示一个配置文件列表,并在显示每个配置文件时标记UserProfile是否是当前用户的朋友

理想情况下,我希望避免在模板上出现嵌套循环,在该循环中,我必须将Friend Queryset与UserProfile Queryset进行比较,以查看是否存在匹配项

我有这样的模型(未显示其他字段):

在视图中,我首先获得所有用户配置文件,然后是当前用户的好友,如下所示:

  profile_query = UserProfile.objects.all().exclude(Q(user_id=request.user.id)).
  select_related('user')

  current_user_friends = Friend.objects.filter(Q(from_userprofile__user_id=request.user.id)
                                                 & Q(status__exact=1))
现在,我想从这里高效地找出“profile\u query”集中的哪些用户也在“current\u user\u friends”集中,并尽可能将这些信息合并到一个列表、字典或查询集中,以便在模板中使用

我想循环并创建一个名为“isFriend”的新字段或值,其中包含“True”或“False”。很明显,我想在这里做繁重的工作

我试图将两个查询集传递到名为“profiles”和“user\u friends”的模板上下文中,类似于下面的方式,这可能是一种垃圾处理方式(它在“else”方面存在一些问题):

{%用于用户中的朋友\u friends%}
{%if friend.to_userprofile.user_id==profile.user_id%}
朋友
{%else%}
不是朋友
{%endif%}
{%endfor%}
任何帮助都将不胜感激。我很难想象如何最好地使用这些模型之间的关系来进行最少的数据库查询并获得所需的结果

干杯
马可

嗯。。。我可能错了,但是删除一段友谊不也会删除这里的两个朋友吗?因为“on_delete”?不,那似乎没有发生。我已经有了“不友好”部分的工作,它似乎不会影响UserProfile实例或关联的用户实例。。。
  profile_query = UserProfile.objects.all().exclude(Q(user_id=request.user.id)).
  select_related('user')

  current_user_friends = Friend.objects.filter(Q(from_userprofile__user_id=request.user.id)
                                                 & Q(status__exact=1))
          {% for friend in user_friends %}
            {% if friend.to_userprofile.user_id == profile.user_id %}
                <div>FRIEND</div>
                {% else %}
                 <div>NOT FRIEND</div>
            {% endif %}
        {% endfor %}