0

模板是

{% for type in types %} <h1>{{type.title}}</h1>

   {% for field in typelist %}
     <label><input type="checkbox" name="{{field}}">{{ field }}</label><br />
   {% endfor %}
{% endfor %} <br />

模型.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}}是 Bus,变量{{ 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 %}没有给出想要的答案。

4

4 回答 4

1

在不改变模型的情况下,我找到了答案!

视图.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,})

模板.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 %}
于 2013-06-21T08:49:38.827 回答
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)
于 2013-05-29T14:23:26.197 回答
0

您能否从您传递类型和类型列表的位置发布视图,以便我们可以准确地传递您传递的内容以及两者之间的关系。

于 2013-05-29T13:49:38.473 回答
0

一个Null-ableCharField 不能None,除非你专门设置它!如果通过 admin 或任何 TextInput 设置值,python 无法区分空字符串None,因此会将其设置为空字符串。文档在这里

在您的模型中,您定义为:

parent_type_id = models.CharField('Parent Type', max_length=100, null=True, blank=True)

在您看来,following 将始终返回一个空的 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=''))
于 2013-06-21T09:16:34.247 回答