模板逻辑不起作用

时间:2013-05-29 12:49:19

标签: django django-models django-forms django-templates

模板是

{% 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 %}一样迭代,没有给出理想的答案。

4 个答案:

答案 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=''))