模板是
{% for type in types %} <h1>{{type.title}}</h1>
{% for field in typelist %}
<label><input type="checkbox" name="{{field}}">{{ field }}</label><br />
{% endfor %}
{% endfor %} <br />
model.py
class Types(models.Model):
user = models.ForeignKey(User, null=True)
title = models.CharField('Incident Type', max_length=200)
parent_type_id = models.CharField('Parent Type', max_length=100, null=True, blank=True)
is_active = models.BooleanField('Is Active', default=True)
下面这个变量{{type.title}}
是总线,变量{{ field }}
是a.Seat和b.Glass,
在我的情况下,如果1.Bus是父元素,并且他们的子元素是a.seat b.Glass并且方式相同2.Classroom,他们的子元素是a.Blackboard b.Table等。
所以使用上面的循环给出了这样的输出1.Bus a.Seat b.Glass a.Blackboard b.Table,但是我给出的上述示例是必需的东西,我改变了一些其他逻辑但是没有填充子元素。
我尝试像{% for field in typelist %}
一样迭代,没有给出理想的答案。
答案 0 :(得分:1)
在不改变模型的情况下,我找到了答案!
views.py
def method(request):
""""""""""
typeList = Types.objects.filter(user=user, is_active=True, parent_type_id=None)
list = []
for type in typeList:
if not type.parent_type_id:
list.append(type)
subtype = Types.objects.filter(parent_type_id=type.id, is_active=True)
for subtypes in subtype:
list.append(subtypes)
""""""""
return render(request, 'some.html',
{'typeList':list,})
template.html
{% for type in typeList%}
{% if type.parent_type_id == None %}
<h1>{{type.title}}</h1>
{% else %}
<label><input type="checkbox" {% if type.id in selection %}checked="True" {% endif %} value="{{ type.id }}" name="type_key">{{ type.title }}</label><br />
{% endif %}
{% endfor %}
答案 1 :(得分:0)
您是否可以从传递类型和类型列表的位置发布视图,以便我们可以准确传递哪些内容以及两者如何相互关联。
答案 2 :(得分:0)
尝试这个,我认为你应该让parent_type_id成为一个外键,但它仍然可以工作。
{% for type in types %} <h1>{{type.title}}</h1>
{% for field in typelist %}
{% if field.parent_type_id == type.id %}
<label><input type="checkbox" name="{{field}}">{{ field }}</label><br />
{% endif %}
{% endfor %}
{% endfor %} <br />
我认为要使上述工作正常,您的模型将需要更改为:
class Types(models.Model):
user = models.ForeignKey(User, null=True)
title = models.CharField('Incident Type', max_length=200)
parent_type_id = models.ForeignKey('self', null=True, blank=True)
is_active = models.BooleanField('Is Active', default=True)
答案 3 :(得分:0)
除非您专门设置,否则Null-able
CharField不能为None
!如果通过admin或任何TextInput设置值,则python无法区分None
的空字符串,因此它将其设置为空字符串。 Documentation is here
在您的模型中,您定义为:
parent_type_id = models.CharField('Parent Type', max_length=100, null=True, blank=True)
在您的视图中,以下将始终返回一个空的QuerySet。因此它永远不会在模板中执行for
循环
types = Types.objects.filter(user=user.id, parent_type_id=None)
最好在这里使用Q
from django.db.models import Q
types = Types.objects.filter(user=user.id, Q(parent_type_id=None|parent_type_id=''))