1

これは、この質問と非常によく似ているようです。リンクをクリックしてpass_countで並べ替えると、次のようになります。

キーワードu'pass_count'をフィールドに解決できません。選択肢は次のとおりです:build、build_no

models.py:

class Run(DashboardBaseModel):
class Meta:
    db_table = 'runs'

build_no   = models.CharField(max_length=200, db_index = True)
release    = models.CharField(max_length=200, db_index = True)
extra_fields = [
        'pass_count',
        ]

@property
def pass_count(self):
    passes = 0
    for build in self.build_set.all():
        passes += build.pass_count
    return passes

Tables.py:

class CombineTable(tables.Table):
build_no = tables.LinkColumn('run', args=[A('release'), A('id')], verbose_name="Build")
pass_count = tables.Column(verbose_name="Passed", attrs={"td": {"class": "num"}, "th": {"class": "num"}})

これを回避する方法はありますか?

4

1 に答える 1

0

db以外のフィールドをソートできるようにするには、データを辞書に変換する必要があります。

runs = Run.objects.all()

table_data = []
for run in runs:
    passes = 0
    for build in run.build_set.all():
        passes += build.pass_count
    table_data.append(dict(
        build_no=run.build_no,
        release=run.release,
        pass_Count=passes,
    ))

table = CombineTable(table_data)

注:これにより、実行ごとに1回データベースが照会されます。これを解決するには、ビルドでQuerySetを実行し、すべてのビルドをループして、実行に基づいて各ビルドのpass_countをディクショナリに追加する必要があります。

于 2013-09-04T21:22:59.267 に答える