ну, мне нужна эта структура для создания таблицы, но мне нравится select_related
Я не думаю, что это правда.
Я предполагаю, что ваш models.py - что-то вроде этого:
class Test(models.Model):
name = models.CharField(unique=True)
class Site(models.Model):
name = models.CharField(unique=True)
class SiteVersion(models.Model):
name = models.CharField()
site = models.ForeignKey(Site)
results = models.ManyToManyField(Test,through='TestResults')
class Meta:
unique_together = ((name,site),)
class TestResults(models.Model):
siteversion = models.ForeignKey(SiteVersion)
test = models.ForeignKey(Test)
class Meta:
unique_together = ((siteversion,test),)
def result_test(self):
# Not sure about this bit, presuming you've got something else on your Test model
return self.test.XXXX(self.siteversion)
В этом случае вы должны быть в состоянии сделать что-то вроде этого:
table = {}
for r in TestResults.objects.select_related('test__name','siteversion__name','siteversion__site__name'):
table.setdefault(r.test__name,{}).setdefault(r.siteversion__site__name,{})[r.siteversion__name] = r.result_test()