Django внутреннее присоединение к модели без прямой связи

мне нужно присоединиться к таблице без прямой связи.

models.py:


class FooModel():
  bar = ForeignKey(Bar)

class BarModel():
  pass

class BazModel():
  bar = ForeignKey(Bar)

class QuxModel():
  foo = ForeignKey(Foo)

пытался связаться с Фу от База, но не получилось

viewset.py:

def BazView(viewsets.ModelViewSet):
  queryset = model.BazModel.objects.all().prefetch_related('bar').prefetch_related('baz__bar')
  serializer_class = serializer.Baz

  def get_queryset(self):
    return self.queryset

serializer.py

class FooSerializer(serializer.ModelSerializer):
  class Meta:
    model = FooModel
    exlude = []

class BarSerializer(serializer.ModelSerializer):
  class Meta:
    model = BarModel
    exlude = []

class BazSerializer(serializer.ModelSerializer):
  foo = FooSerializer()

  class Meta:
    model = BarModel
    exlude = []

class QuxSerializer(serializer.ModelSerializer):
  class Meta:
    model = QuxModel
    exlude = []

используя prefetch таким образом, я получил ошибку, говорящую, что Baz не имеет поля foo.

также хотелось бы получить данные из QuxModel на основе Foo FK...

как я могу это сделать?

Попробуйте это:

model.BazModel.objects.all().select_related('bar').prefetch_related('bar__foomodel_set')

Затем в BazSerializer вы можете установить source для foo следующим образом:

class BazSerializer(serializer.ModelSerializer):
    foo = FooSerializer(source='bar.foomodel_set')

Это скажет сериализатору foo получить данные из объектов FooModel, используя BazModel объекты bar.

Возможно, вам придется изменить foomodel_set на связанное имя, которое вы установили для доступа к FooModel из BarModel.

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