在django应用程序中循环 - 检查对象是否已创建

时间:2013-06-06 21:46:03

标签: python django

我对django app有问题:

class Module(models.Model):
    requirements = models.ManyToManyField("self", related_name='wym', symmetrical=False)
    status = ''

class EndedModules(models.Model):
    user = models.ForeignKey('auth.User')
    module = models.ForeignKey('Module')
    end_time = models.DateTimeField(blank=True, null=True)

并在视野中:

modules = Module.objects.all()
for module in modules:
    try:
        exist = EndedModules.objects.get(user=request.user,module=module)
        if exist.end_time:
            module.status = 'ended'
        else:
            module.status = 'started not ended'
    except:
        module.status = 'not exist'

但是当我试图在模板中显示时:

{% for module in modules %}
    {% for element in module.requirements.all %}
        {{ element.status }}
    {% endfor %}
{% endfor %}

它不起作用。

还有其他方法吗?

我试图在模型中使用此功能,但我无法访问request.user

谢谢!

1 个答案:

答案 0 :(得分:0)

您在第一个status循环中设置module属性,同时迭代模板中完全不同的数据集(requirements.all)。

假设您将modules传递给模板上下文,根据您的视图,您已在外部module循环上设置属性,但不在内部element循环中设置属性。外部循环对应于模板中的{{ module.status }}

{{ element.status }}正在迭代新创建的查询集,并会反映您在类定义中的内容status = ''

{% for module in modules %}
    {% for element in module.requirements.all %}
        {{ element.status }}
        <!-- ^^^ this doesn't have a status value - only {{ module.status }} -->
    {% endfor %}
{% endfor %}