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
.