我需要加入沒有直接關系的表。
模型.py:
class FooModel():
bar = ForeignKey(Bar)
class BarModel():
pass
class BazModel():
bar = ForeignKey(Bar)
class QuxModel():
foo = ForeignKey(Foo)
試圖從 Baz 聯系 Foo 但沒有成功
視圖集.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
序列化程式.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 欄位。
還想從基于 Foo FK 的 QuxModel 獲取資料...
我怎么能做到這一點?
uj5u.com熱心網友回復:
試試這個:
model.BazModel.objects.all().select_related('bar').prefetch_related('bar__foomodel_set')
然后在 中BazSerializer,您可以像這樣設定sourcefor foo:
class BazSerializer(serializer.ModelSerializer):
foo = FooSerializer(source='bar.foomodel_set')
這將告訴序列化程式使用's從物件foo中獲取它的資料。FooModelBazModelbar
您可能必須更改為您設定為從 foomodel_set訪問的相關名稱。FooModelBarModel
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/416260.html
標籤:
上一篇:如何激活python的虛擬環境?
