Как получить несколько модулей ModelSrializer в одном APIVIEW с помощью Django Rest Framework

У меня UserModel у каждого пользователя есть несколько package и у каждого пакета есть price и program. model.py:

class User(models.Model):
    name= models.CharField(max_length=100)
class Package(models.Model):
    package_name = models.CharField(max_length=100)
    user= models.ForeignKey(User, on_delete=models.CASCADE,related_name='user_package')
class Program(models.Model):
    title = models.CharField(max_length=100)
    user_package = models.ForeignKey(Package, on_delete=models.CASCADE)
class Price(models.Model):
    price = models.FloatField()
    user_package = models.ForeignKey(Package, on_delete=models.CASCADE)

сериализатор выглядит следующим образом:

class UserSerializer(NestedCreateMixin, NestedUpdateMixin,serializers.ModelSerializer):
    program = ProgramSerializer(source='user_program', many=True, read_only=True)
    package = PackageSerializer(source='user_package', many=True, read_only=True)
    price = PriceSerializer(source='price', many=True, read_only=True)
    class Meta:
        model = User
        fields= ("__all__")

views.py:

class user_apiView(APIView):
    def get(self, request):
        user= user.objects.all()
        serializer = UserSerializer(user, many = True)
        return Response(serializer.data)

и вот что я получаю:

{
        "id": 1,
        "package": [
            {
                "id": 1,
                "package_name": "wfe",
                "user": 1
            },
            {
                "id": 2,
                "package_name": "wfe",
                "user": 1
            }
        ]
}

как получить этот результат?

{
            "id": 1,
            "package": [
                {
                    "id": 1,
                    "package_name": "wfe",
                    "user": 1
                },
                {
                    "id": 2,
                    "package_name": "wfe",
                    "user": 1
                }
              ],
             "price": [
                {
                    "id": 1,
                    "price": "wfe",
                    "package": 1
                },
                {
                    "id": 2,
                    "price": "wfe",
                    "package": 2
                }
              ]
              "program": [
                {
                    "id": 1,
                    "title": "wfe",
                    "package": 1
                },
                {
                    "id": 2,
                    "title": "wfe",
                    "package": 2
                }
              ]
    }

Проблема в том, что ваши модели цены и программы не связаны напрямую с вашей моделью пользователя. Если вы рассматриваете отношения, то это выглядит как price -> package -> user, поэтому вам придется получить эти отношения в сериализаторе пакета следующим образом

serializers.py

class ProgramSerializer(serializers.ModelSerializer):
    class Meta:
        model = Program
        fields= ("__all__")


class PriceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Price
        fields= ("__all__")

class PackageSerializer(serializers.ModelSerializer):
    program = ProgramSerializer(source='program_set', many=True, read_only=True)
    price = PriceSerializer(source='price_set', many=True, read_only=True)

    class Meta:
        model = Package
        fields= ("__all__")

class UserSerializer(serializers.ModelSerializer):
    package = PackageSerializer(source='user_package', many=True, read_only=True)
    
    class Meta:
        model = User
        fields= ("__all__")

Обратите внимание, что это, однако, не даст вам вывод в формате, который вы упомянули, поля цены и программы будут вложены в пакет.

[
    {
        "id": 1,
        "package": [
            {
                "id": 1,
                "program": [
                    {
                        "id": 1,
                        "title": "program1",
                        "user_package": 1
                    }
                ],
                "price": [
                    {
                        "id": 1,
                        "price": 1000.0,
                        "user_package": 1
                    }
                ],
                "package_name": "package1",
                "user": 1
            },
            {
                "id": 2,
                "program": [
                    {
                        "id": 2,
                        "title": "program2",
                        "user_package": 2
                    }
                ],
                "price": [
                    {
                        "id": 2,
                        "price": 1500.0,
                        "user_package": 2
                    }
                ],
                "package_name": "package2",
                "user": 1
            }
        ],
        "name": "user1"
    }
]

Если вам действительно нужен формат в том виде, в котором вы его разместили, вы можете вместо этого взглянуть на https://www.django-rest-framework.org/api-guide/fields/#serializermethodfield

Вернуться на верх