Django REST ManyToManyField使用序列化程序获取相关值
我是django的新手。我到处找了,但没有找到任何相关的 我有两张桌子的主人和服务员。所有者可以选择N个服务。 我正在使用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
[
{
"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是预订服务的用户。