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 ? Или, может быть, отношения моих моделей построены неправильно?

Вернуться на верх