プロジェクトには少し複雑なモデルがあります。一般的な関係によって相互にバインドされる 3 つのモデルがあります。
モデルの例を次に示します。
class Person(models.Model):
first_name = models.CharField()
last_name = models.CharField()
ptype = models.CharField()
mapping = models.ForeignKey("Mapping", related_name="mapping")
class Profile(models.Model):
rank = models.CharField()
company = models.ForeingKey("Company")
class Company(models.Model:
name = models.Charfield()
class Mapping(models.Model):
origin_person_ctype = models.ForeignKey(ContentType, related_name="origin_mapping")
origin_person_id = models.PositiveIntegerField()
origin_person_object = GenericForeignKey('origin_person_ctype', 'origin_person_id')
mapped_profile_ctype = models.ForeignKey(ContentType, related_name="mapped_mapping")
mapped_profile_id = models.PositiveIntegerField()
mapped_profile_object = GenericForeignKey('mapped_profile_ctype', 'mapped_profile_id')
company = models.ForeignKey("Company")
また、Person モデルからデータを取得するための Rest API があります。
class PersonAPIView(generics.RetrieveUpdateAPIView):
serializer_class = PersonSerializer
lookup_url_kwarg = 'person_id'
def get_queryset(self):
return Person.objects.all().prefetch_related(
"mapping",
"mapping__mapped_profile_object",
"mapping__company"
)
class PersonSerializer(serializers.ModelSerializer)
class Meta:
model = Person
fields = (
'id',
'first_name',
'last_name',
'type',
)
ここで、クラスにネストされた辞書リストとしてCompany.name
andを追加する必要があります。Profile.rank
PersonSerializer
このような一般的な関係値をシリアル化するにはどうすればよいですか:
[
{"company1": "rank1"},
{"company2": "rank2"}
etc...
]