1

在视图中我想获取汽车对象,然后更改first_yearvar。

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 个模型 - mark、groups 和 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,因为它有很多没有年份等的领域。

4

2 回答 2

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

于 2013-02-28T16:20:03.483 回答
0

你的意思是:

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

仅当组具有来自标记的外键时才允许

于 2013-02-28T14:05:19.447 回答