【发布时间】:2019-01-12 23:36:16
【问题描述】:
我有这个类视图,但我无法修改序列化器数据以插入更多数据(这是必需的并且需要自动填充)。 因为我一次创建了许多实例,所以序列化程序基于 kwargs['many'] = True。
知道如何向每个序列化程序数据添加另一个字段吗?
谢谢,
:
class ReservedServiceView(CreateListModelMixin, ModelViewSet):
queryset = ReservedService.objects.all()
serializer_class = ReservedServiceSerializer
authentication_classes = (authentication.TokenAuthentication,)
def perform_create(self, serializer):
# Create an event that is a Reflection of the Reserved Service
serializer_data = self.request.data
for reserved_service in serializer_data:
print("--------",reserved_service, flush=True)
service_id = reserved_service['original_service']
original_service = Service.objects.get(pk=service_id)
calendar_event = CalendarEvent()
calendar_event.name = original_service.name
calendar_event.description = original_service.description
calendar_event.date = reserved_service['date']
calendar_event.type_id = 1
calendar_event.start_time = reserved_service['start_time']
calendar_event.end_time = reserved_service['end_time']
calendar_event.location_id = original_service.location.id
calendar_event.save()
reserved_service['associated_event'] = calendar_event.id
print("**********1", serializer_data)
print("**********2", self.request.data)
serializer.save()
基于:
class CreateListModelMixin(object):
def get_serializer(self, *args, **kwargs):
""" if an array is passed, set serializer to many """
if isinstance(kwargs.get('data', {}), list):
kwargs['many'] = True
return super(CreateListModelMixin, self).get_serializer(*args, **kwargs)
【问题讨论】:
-
而且我知道如果我使用:例如 serializer.save(associated_event_id=1) ,它会起作用,但我需要为每个序列化对象保存不同的数据。不只是每个人都一样。谢谢。
-
你的意思是每个
reserved_service在循环中,你想在每个条件下获得不同的serializer类并保存它? -
是的。我最终在序列化程序中覆盖了 create,但我想在视图中执行它。我想在每个序列化器数据中注入一个额外的字段。我做到了,但是当 django 序列化数据时,它不会填充新字段(关联事件)
-
我在代码中看到的一个错误是您正在使用
self.request.data获取序列化程序数据,这将为您提供请求中的原始数据,而不是您在调用 @ 后获得的验证数据987654326@ 方法。所以,你应该使用serializer.validated_data而不是serailizer_data=self.request.data
标签: python django python-3.x django-rest-framework serialization