3

プロジェクトには少し複雑なモデルがあります。一般的な関係によって相互にバインドされる 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.nameandを追加する必要があります。Profile.rankPersonSerializer

このような一般的な関係値をシリアル化するにはどうすればよいですか:

[
    {"company1": "rank1"},
    {"company2": "rank2"}
    etc...
]
4

0 に答える 0