django - Django REST ManyToManyField 使用序列化器获取相关值
问题描述
我是 Django 的新手。我已经搜索了整个stackoverflow,但确实得到了任何相关的东西。
我有两个表所有者和服务。所有者可以选择 N 个服务。我正在使用 ManyToManyField,我想在通用视图中获取相关值。可能可以使用 prefetch_related 函数来实现,但我不知道如何。我想要如下所示的输出。谁能帮我实现低于预期的输出。谢谢
预期产出
[
{
"owner_id": 1,
"first_name": "james",
"last_name": "cook",
"services_id": [
[1, service_title, desc],
[2, service_title, desc],
[3, service_title, desc]
]
}
]
模型.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',
]
视图.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
]
}
]
解决方案
在你的使用这个ServicesSerializer
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]
并将其添加到您的ownerSerializer
class ownerSerializer(reservationSerailizer):
service_id = servicesSerializer(many=True, read_only=True)
class Meta:
model=reservations
fields = [
'owner_id',
'first_name',
'last_name',
'services_id',
]
这里的文档
推荐阅读
- prolog - 在 Prolog 中是否可以在语句的左侧进行 NOT 操作?
- wpf - 如何将 .NET Framework 5.0 添加到 Visual Studio Professional 2019?
- php - 捕获“缺少或不正确的 CSRF cookie 类型”。例外
- python - 如何设置连接为字典键的不同值?
- php - openssl_verify():提供的密钥参数不能被强制转换为公钥
- python-3.x - TrainDeepLearningModel 工具在 arcgis pro 中没有响应
- sonarqube-scan - 声纳扫描仪无法创建 report-task.txt 文件
- c++ - 有没有办法用##和#宏将类名和其他字符连接成一个字符串
- css - 同一 .vue 文件中的 Vuejs 作用域和非作用域 CSS
- c++ - 如何填充二维数组?