0

我对 django 应用程序有疑问:

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

谢谢!

4

1 回答 1

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 %}
于 2013-06-07T00:48:16.833 回答