如何在包含manytomany字段的查询中只有一个结果?

时间:2016-02-16 23:04:26

标签: django

用户1有选项A和C, 用户2有选项A和B

如果用户A被注销,他可以看到这个

  • 选项A - 您有
  • 选项B - 你喜欢这个吗? (带按钮添加)
  • 选项C - 您有
  • 选项D - 你喜欢这个吗? (带按钮添加)
  • 选项E - 你喜欢这个吗? (带按钮添加)

如果用户2被注销,他可以看到这个

  • 选项A - 您有
  • 选项B - 你有
  • 选项C - 你喜欢这个吗? (带按钮添加)
  • 选项D - 你喜欢这个吗? (带按钮添加)
  • 选项E - 你喜欢这个吗? (带按钮添加)

但只能这样做:

如果用户1已注册:

  • 选项A - 你有 - 你喜欢这个吗? (带按钮添加)
  • 选项B - 你喜欢这个吗? (带按钮添加) - 你喜欢这个吗? (带按钮添加)
  • 选项C - 你有 - 你喜欢这个吗? (带按钮添加)
  • 选项D - 你喜欢这个吗? (带按钮添加) - 你喜欢这个吗? (带按钮添加)
  • 选项E - 你喜欢这个吗? (带按钮添加) - 你喜欢这个吗? (带按钮添加)

和用户2:

  • 选项A - 你有 - 你喜欢这个吗? (带按钮添加)
  • 选项B - 你有 - 你喜欢这个吗? (带按钮添加)
  • 选项C - 你喜欢这个吗? (带按钮添加) - 你喜欢这个吗? (带按钮添加)
  • 选项D - 你喜欢这个吗? (带按钮添加) - 你喜欢这个吗? (带按钮添加)
  • 选项E - 你喜欢这个吗? (带按钮添加)

我的模特:

class Options(models.Model):
    option_titulo = models.Charfield(max_lenght=100)
    user = models.ManyToManyField(User, null=True, blank=True, default=None)

我的观点:

def ListaOptions(request):
    userid=request.user.id
    options=Options.objects.all()
    opt_user=Options.objects.filter(user__id=userid)

    return render_to_response(
      'options.html',
       {
        'options': options,
        'opt_user': opt_user,
       },
       context_instance=RequestContext(request)
                )

我的模板:

 {% for o in options %}

   {{ o.option_titulo }} - 

   {% for u in opt_user %}

     {% if u.id == o.id %}
      you have
     {% else %}
      you like this? (with a button for add)
     {% endif %}

   {% endfor %}

 {% endfor %}

1 个答案:

答案 0 :(得分:0)

您可以使用in为每个选项测试它是否在opt_user中:

{% for o in options %}
    {{ o.option_titulo }} - 
    {% if o in opt_user %}
        you have
    {% else %}
        you like this? (with a button for add)
    {% endif %}
{% endfor %}