Django REST ManyToManyField使用序列化程序获取相关值

Django REST ManyToManyField使用序列化程序获取相关值,django,django-rest-framework,Django,Django Rest Framework,我是django的新手。我到处找了,但没有找到任何相关的 我有两张桌子的主人和服务员。所有者可以选择N个服务。 我正在使用ManyToManyField,我想在通用视图中获取相关值。可能它可以实现使用预取_相关的功能,但我不知道如何。 我想输出如下。谁能帮我实现低于预期的产量。谢谢 预期产出 [ { "owner_id": 1, "first_name": "james", "last_name": "cook", "ser

我是django的新手。我到处找了,但没有找到任何相关的

我有两张桌子的主人和服务员。所有者可以选择N个服务。 我正在使用ManyToManyField,我想在通用视图中获取相关值。可能它可以实现使用预取_相关的功能,但我不知道如何。 我想输出如下。谁能帮我实现低于预期的产量。谢谢

预期产出

[
    {
        "owner_id": 1,
        "first_name": "james",
        "last_name": "cook",
        "services_id": [
               [1, service_title, desc],
               [2, service_title, desc],
               [3, service_title, desc]
        ]
    }
]
model.py

class services(models.Model):   
   service_id=models.IntegerField(primary_key=True)
   title=models.CharField(max_length=200)
   description=models.TextField()
   type=models.PositiveSmallIntegerField() #1: Package; 2: A La Carte
   status=models.PositiveSmallIntegerField(default=1)

class reservations(models.Model):
   owner_id=models.IntegerField()
   first_name=models.CharField(max_length=50)
   last_name=models.CharField(max_length=50)
   services_id=models.ManyToManyField(services, related_name='services')
序列化程序.py

class servicesSerializer(ModelSerializer):
    class Meta:
        model=services
        fields = [
            'service_id'
            'title',
            'description',
            'type',
        ]


class ownerSerializer(ModelSerializer):
    class Meta:
        model=reservations
        fields = [
        'owner_id',
        'first_name',
        'last_name',
        'services_id',
        ]
View.py

class upcomingServices(ListAPIView):
 queryset = owner.objects.all()
 serializer_class=ownerSerializer
输出

[
{
    "owner_id": 1,
    "first_name": "james",
    "last_name": "cook",
    "services_id": [
        1,
        2,
        3
    ]
}
]

在您的
服务序列化程序中使用此选项

class servicesSerailizer(ModelSerializer):
        class Meta:
            model=services
            fields = [
                'service_id'
                'title',
                'description',
                'type',
            ]

        def to_representation(self, value):
            return [value.pk, value.title, value.description]
class ownerSerializer(reservationSerailizer):
    service_id = servicesSerializer(many=True, read_only=True)
    class Meta:
        model=reservations
        fields = [
            'owner_id',
            'first_name',
            'last_name',
            'services_id',
             ]
并将其添加到您的
ownerSerializer

class servicesSerailizer(ModelSerializer):
        class Meta:
            model=services
            fields = [
                'service_id'
                'title',
                'description',
                'type',
            ]

        def to_representation(self, value):
            return [value.pk, value.title, value.description]
class ownerSerializer(reservationSerailizer):
    service_id = servicesSerializer(many=True, read_only=True)
    class Meta:
        model=reservations
        fields = [
            'owner_id',
            'first_name',
            'last_name',
            'services_id',
             ]

文档

在您的
服务序列化程序中使用此选项

class servicesSerailizer(ModelSerializer):
        class Meta:
            model=services
            fields = [
                'service_id'
                'title',
                'description',
                'type',
            ]

        def to_representation(self, value):
            return [value.pk, value.title, value.description]
class ownerSerializer(reservationSerailizer):
    service_id = servicesSerializer(many=True, read_only=True)
    class Meta:
        model=reservations
        fields = [
            'owner_id',
            'first_name',
            'last_name',
            'services_id',
             ]
并将其添加到您的
ownerSerializer

class servicesSerailizer(ModelSerializer):
        class Meta:
            model=services
            fields = [
                'service_id'
                'title',
                'description',
                'type',
            ]

        def to_representation(self, value):
            return [value.pk, value.title, value.description]
class ownerSerializer(reservationSerailizer):
    service_id = servicesSerializer(many=True, read_only=True)
    class Meta:
        model=reservations
        fields = [
            'owner_id',
            'first_name',
            'last_name',
            'services_id',
             ]

文档

我稍微改变了
视图,如下所示,

class upcomingServices(ListAPIView):
    queryset = reservations.objects.all()  # Changed here
    serializer_class = ownerSerializer
class servicesSerializer(serializers.ModelSerializer):
    class Meta:
        model = services
        fields = ['service_id'
                  'title',
                  'description',
                  'type',
                  ]

    def to_representation(self, instance):
        return [instance.service_id, instance.title, instance.description]


class ownerSerializer(serializers.ModelSerializer):
    services_id = servicesSerializer(many=True)

    class Meta:
        model = reservations
        fields = [
            'owner_id',
            'first_name',
            'last_name',
            'services_id',
        ]

更改您的
serializer.py
,如下所示,

class upcomingServices(ListAPIView):
    queryset = reservations.objects.all()  # Changed here
    serializer_class = ownerSerializer
class servicesSerializer(serializers.ModelSerializer):
    class Meta:
        model = services
        fields = ['service_id'
                  'title',
                  'description',
                  'type',
                  ]

    def to_representation(self, instance):
        return [instance.service_id, instance.title, instance.description]


class ownerSerializer(serializers.ModelSerializer):
    services_id = servicesSerializer(many=True)

    class Meta:
        model = reservations
        fields = [
            'owner_id',
            'first_name',
            'last_name',
            'services_id',
        ]

我稍微改变了
视图,如下所示,

class upcomingServices(ListAPIView):
    queryset = reservations.objects.all()  # Changed here
    serializer_class = ownerSerializer
class servicesSerializer(serializers.ModelSerializer):
    class Meta:
        model = services
        fields = ['service_id'
                  'title',
                  'description',
                  'type',
                  ]

    def to_representation(self, instance):
        return [instance.service_id, instance.title, instance.description]


class ownerSerializer(serializers.ModelSerializer):
    services_id = servicesSerializer(many=True)

    class Meta:
        model = reservations
        fields = [
            'owner_id',
            'first_name',
            'last_name',
            'services_id',
        ]

更改您的
serializer.py
,如下所示,

class upcomingServices(ListAPIView):
    queryset = reservations.objects.all()  # Changed here
    serializer_class = ownerSerializer
class servicesSerializer(serializers.ModelSerializer):
    class Meta:
        model = services
        fields = ['service_id'
                  'title',
                  'description',
                  'type',
                  ]

    def to_representation(self, instance):
        return [instance.service_id, instance.title, instance.description]


class ownerSerializer(serializers.ModelSerializer):
    services_id = servicesSerializer(many=True)

    class Meta:
        model = reservations
        fields = [
            'owner_id',
            'first_name',
            'last_name',
            'services_id',
        ]

谢谢你的回复。。我已经按照您的建议更新了我的代码,现在它没有显示services\u id字段本身。我的输出如下[{“owner_id”:1,“first_name”:“james”,“last_name”:“cook”}]谢谢您的回复。。我已经按照您的建议更新了我的代码,现在它没有显示services\u id字段本身。我的输出是这样的[{“owner\u id”:1,“first\u name”:“james”,“last\u name”:“cook”}]什么是
owner
model?owner是预订服务的用户。什么是
owner
model?owner是预订服务的用户。