У меня есть такая модель данных Django (поля данных опущены):
class Atom(Model):
pass
class State(Model):
atom = ForeignKey(Atom)
class Transition(Model):
atom = ForeignKey(Atom)
upstate = ForeignKey(State,related_name='uptrans')
lostate = ForeignKey(State,related_name='lotrans')
Когда я запрашиваю, поля для ограничения могут быть в любой модели, поэтому проще всего запросить по Transition.objects.filter(...)
, так как все поля в других моделях могут быть доступны через внешние ключи. Назовем полученный QuerySet t
.
Теперь, в дополнение к этому, мне нужен QuerySet a
модели Atom, который соответствует t
, что можно сделать как a = t.values('atom').distinct()
. Пока все хорошо.
Однако я также хочу, чтобы каждая из записей в a
имела один атрибут / поле , содержащий QuerySet для состояний этого атома, по-прежнему отражая критерии исходного выбора t
через один из upstate
или lostate
ForeignKeys.
Я до сих пор создавал свой QuerySet для состояний, зацикливая t
, добавляя values('upstate_id')
и values('lostate_id')
к Python set()
для выбрасывания дубликатов, а затем запрашивая состояния с этим списком. Но тогда я не могу достичь вложенной структуры состояний внутри атомов.
Любые предложения о том, как это сделать, приветствуются, если возможно, с неоцененными QuerySet
с, поскольку я передаю их не в шаблон, а в генератор (операторы yield
), который является хорошим способом потоковой передачи большого количества данные.