Django REST API. Как сериализовать ArrayField с идентификаторами пользователей и получить как объект JSON модели User? - PullRequest
0 голосов
/ 01 августа 2020

У меня есть ArrayField в модели Company

models.py

class Company(models.Model):
    members = ArrayField(models.IntegerField(blank=True), blank=True)
    ...

serializers.py

class CompanySerializer(serializers.ModelSerializer):
    class Meta:
        model = Company
        fields = ('name', 'description', 'date_created', 'user', 'status', 'theme', 'members')
    ...

Он возвращает это JSON

    {
        "name": "Jeep",
        "description": "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.",
        "date_created": "2020-07-20T21:27:28.586149Z",
        "user": 2,
        "status": 2,
        "theme": 3,
        "members": [
            1,
            2,
            3
        ]
    }
   ...

, где элементы поля содержат идентификаторы пользователей из модели User. Я хочу изменить эти идентификаторы на объекты данных пользователя по его идентификатору

...
        "members": [
            {"id" : 1, ...},
            {"id" : 2, ...},
            {"id" : 3, ...},
        ]
...

1 Ответ

0 голосов
/ 01 августа 2020

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

class CompanySerializer(serializers.ModelSerializer):
    members = serializers.SerializerMethodField()
    class Meta:
        model = Company
        fields = ('name', 'description', 'date_created', 'user', 'status', 'theme', 'members')

    def get_members(self, obj):
        users = User.objects.filter(id__in=obj.members)
        return UserSerializer(users, many=True).data
...