这可能不相关,但只是想问,
如果一个对象从视图传递到模板,并且在模板中我将能够查询多个到多个字段
模型代码:
class Info(models.Model):
xls_answer = models.TextField(null=True,blank=True)
class Upload(models.Model):
access = models.IntegerField()
info = models.ManyToManyField(Info)
time = models.CharField(max_length=8, null=True,blank=True)
error_flag = models.IntegerField()
def __unicode__(self):
return self.access
查看:
// obj_Arr contains all the objects of upload
for objs in obj_Arr:
logging.debug(objs.access)
logging.debug(objs.time)
return render_to_response('upload/new_index.html', {'obj_arr': obj_Arr , 'load_flag' : 2})
在模板中,可以解码多对多字段,因为我们传递了对象
谢谢..
答案 0 :(得分:30)
通常,您可以通过django模板系统中的路径跟踪任何属性或方法调用,而不使用任何参数。
对于上面的视图代码,类似
{% for objs in obj_arr %}
{% for answer in objs.answers.all %}
{{ answer.someattribute }}
{% endfor %}
{% endfor %}
应该做你期望的事。
(我无法从您的代码示例中详细说明具体内容,但希望这会说明您可以通过模板获得的内容)
答案 1 :(得分:1)
也可以注册这样的过滤器:
class Profile(models.Model):
options=models.ManyToManyField('Option', editable=False)
@register.filter
def does_profile_have_option(profile, option_id):
"""Returns non zero value if a profile has the option.
Usage::
{% if user.profile|does_profile_have_option:option.id %}
...
{% endif %}
"""
return profile.options.filter(id=option_id).count()
有关过滤器的更多信息,请访问https://docs.djangoproject.com/en/dev/howto/custom-template-tags/