1

ビューでcar-objectを取得してから、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。ご存知のように、マーク、グループ、first_yearの3つのモデルがあります。必要に応じて、ここで公開できますが、私の見解では何かがおかしいと思います。

ありがとう。

編集。モデル。

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

モデルマークがないので、年などのない多くのフィールドがあるためです。

4

2 に答える 2

1

ビューに変更を加えるループはfor変更をどこにも保存しないため、値がテンプレートに渡されたときに変更は表示されません。

ここでの1つの解決策は、モデルに新しいモデルメソッドを追加し、そこで日付比較を行うことです。

モデルに次のような関数を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 %}

モデルメソッドのドキュメントはこちらでご覧いただけます。また、カスタムテンプレートフィルターのドキュメントはこちらです。

于 2013-02-28T16:20:03.483 に答える
0

もしかして:

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

これは、グループがマークからの外部キーを持っている場合にのみ許可されます

于 2013-02-28T14:05:19.447 に答える