所以我有很多很多领域。在模板中,我想验证当前用户是否存在于manytomany字段中并分别显示输出
model.py
class Business(models.Model):
businessname=models.CharField(max_length=230,null=True)
creator==models.ForeignKey(User,unique=True)
users=models.ManyToManyField(Users,null=True,related-name="shared")
在我的veiw.py
中def Display(request):
BusinessObjects = Business.objects.all()
template="template.html"
return render(request,template,context={'objects':BusinessObjects})
template.html
<div class="allobjects">
{% for obj in objects %}
{{obj.businessname}}
<!-- verify if the current login user exist in the many to many field-->
{% for currentuser in obj.users %}
{% if user.username in currentuser.username %}
<p> You are sharing this object</p>
{% else %}
<p> You are not sharing this object
{% endif %}
{% endfor %}
{% endfor %}
</div>
尽管用户名不存在,但我的else语句不起作用。但是如果用户名存在,则第一条语句执行。我在if语句中做错了什么以及为什么我的else语句不能正常工作。谢谢。请不要降级我的问题是否对你不重要。
答案 0 :(得分:0)
根据Django的文档,空值解析为“无”而不是导致错误。因此,可能两个值都无法解决:https://docs.djangoproject.com/en/2.0/ref/templates/language/
{% if user.username in currentuser.username %}
如果它们都是空的,则应该解析为真。
修改强> 这里的实际问题是你使用“in”作为比较运算符而不是“==”。如果缺少用户名,则检查给定字符串中是否包含空字符串(它是 - 有点像0元素是任何元素集的子集)。
如果要过滤掉空字符串,可以使用长度标记。来自docs:
length¶
Returns the length of the value. This works for both strings and lists.
For example:
{{ value|length }}
If value is ['a', 'b', 'c', 'd'] or "abcd", the output will be 4.
The filter returns 0 for an undefined variable.
{% if user.username|length > 0 %}
答案 1 :(得分:0)
{% if not user in obj.users.all%}
{% else %}
{% endif %}