Django : Добавление дополнительного набора для объектов без прямого относительного ForeignKey
Тема кажется немного запутанной, но мой случай немного сложный. Я создаю приложение для отображения файлов продуктов поставщиков (называется FLOW). У меня есть 4 модели :
models.flow : поток от поставщика (csv)
class Flow(models.Model):
[...]
nothing special here
models.FicheHeader : все поля, которые я буду заполнять данными, полученными из CSV
class FicheHeader(models.Model):
label = models.CharField(max_length=50, unique=True)
models.FicheHeaderFlow : построена еще одна таблица для ссылок на все необходимые поля, которые должны быть выполнены
class FicheHeaderFlow(models.Model):
label = models.ForeignKey(FicheHeader, on_delete=models.CASCADE)
flow = models.ForeignKey(Flow, on_delete=models.CASCADE)
used = models.BooleanField(default=False)
models.FlowSample : образцы первой строки из CSV, записанной при создании потока
class FlowSample(models.Model):
index_col = models.IntegerField()
content = models.TextField(max_length=255)
flow_id = models.ForeignKey(Flow, on_delete=models.CASCADE)
Эта последняя модель подключается только к Flow FK.
Теперь мне нужно отобразить в том же шаблоне все поля, сопоставленные с идентификаторами относительных колонок CSV, и показать предварительный просмотр результата с помощью FlowSamples.
Мне удалось сделать все, кроме извлечения FlowSample, связанных с MappingField.fl_fiche_header_flow. Потому что MappingField и FlowSample не имеют прямой связи FK (нет возможности SET).
Мой набор_запросов :
def get_queryset(self, *args, **kwargs):
return FicheHeaderFlow.objects.
prefetch_related(Prefetch('mappingfield_set', MappingField.objects.select_related('fl_fiche_header_flow')
.order_by('fl_fiche_header_flow_id', 'fl_fiche_inside_field_position')))
.filter(flow_id=self.kwargs['pk']).order_by('-used', 'pk')
Я пытался в течение 2 дней использовать custom model manager (похоже, это не то, что мне нужно), добавлять поля с помощью сериализатора (тщетно), модифицировать query_set с помощью prefetch, prefetch_related и selected_related и наконец я смог справиться с отправкой сериализованного JSON Образцов в шаблон и успешно управлять им с помощью Javascript.
Вопрос : это возможно достичь только с помощью query_set ? Или, может быть, отношения моих моделей построены неправильно?