对于视图中的循环

时间:2013-02-28 13:58:33

标签: django

在视图中我想获得car-object,然后更改first_year var。

def cars(request, mark_id, year=year):
        #BMW, etc.
    mark = get_object_or_404(Mark, pk=mark_id, active=1)
        #M, X-series, etc.
    for group in mark.groups.iterator():
        group.first_year.year = int(year)-int(group.first_year.year)
    return render(request, 'cars.html', {  'mark':mark, })

所以,在模板中我使用:

{% for i in mark.groups.all %}

{{i.first_year}}

{% endfor %}

它返回db的值,而不是我的group.first_year.year。您可以理解,有3个模型 - 标记,组和first_year。如果你需要,我可以在这里发布,但我认为,我的观点有些不对劲。

感谢。

修改。模型

class First_Year(models.Model):
    year = models.IntegerField()
    def __unicode__(self):
        return str(self.year)

class Groups(models.Model):
        many_other_fields
    mark = models.ForeignKey(Mark, related_name='groups')
    last_update = models.DateTimeField()
    first_year = models.ForeignKey(First_Year, related_name='first_year')
    def __unicode__(self):
        return self.name
    def altered_date(self, year):
        altered_year = int(year)-int(self.first_year.year)
        return altered_year

没有模型Mark,因为它有许多没有年份的字段等等。

2 个答案:

答案 0 :(得分:1)

在您的视图中进行更改的for循环不会将更改保存在任何位置,因此在将值传递给模板时您将看不到更改。

这里的一个解决方案是在模型中添加新的模型方法并在那里进行日期比较。

First_Year模型中添加altered_date函数,如下所示:

class First_Year(models.Model):
    year = models.IntegerField()
    def __unicode__(self):
        return str(self.year)
    def altered_date(self, this_year):
        altered_year = int(this_year)-int(self.year)
        return altered_year

通过调用函数,可以获得每个First_Year模型的更改年份。不幸的是,这个函数需要一个额外的参数 - year - 所以不能直接从模板中调用它。您可以创建自定义模板过滤器来解决此问题:

@register.filter
def get_altered_year(obj, gar):
    return obj.altered_date(gar)

现在你只需要确保通过修改你的回报来将年份传递给你的观点:

def cars(request, mark_id, year=year):
    ...
    return render(request, 'cars.html', {'mark':mark, 'year':year, })

然后在你的模板中你可以做到:

{% for i in mark.groups_set.all %}
    {{i.first_year|get_altered_year:year }}
{% endfor %}

您可以查看模型方法文档here。以及自定义模板过滤器的文档here

答案 1 :(得分:0)

你的意思是:

{% for i in mark.groups_set.all %}
   {{i.first_year}}
{% endfor %}

这仅允许组具有来自标记

的外键