【发布时间】:2018-09-13 08:26:45
【问题描述】:
我对 Django 序列化程序还很陌生,仍然对它们的工作方式感到困惑。
我有一个相当普遍的场景,其中我正在调用我的 api,它只是在我的模型对象中设置一个字段并保存它(假设记录已经存在并且它正在被更新)。但是,我需要在保存之前验证这个模型对象。
api.py
@detail_route(methods=['POST'], url_path='submit-draft')
def submit_draft(self, request, *args, **kwargs):
booking = self.get_object()
# serializer with custom validations.
serializer = self.get_serializer(booking)
serializer.is_valid(raise_exception=True)
booking.submit_draft(by=request.user)
booking.save()
data = serializers.BookingDetailSerializer(booking, context={'request': request}).data
return response.Ok(data)
serializers.py
class BookingCreateUpdateSerializer(serializers.ModelSerializer):
date = serializers.CharField()
duration = serializers.IntegerField(required=True, )
created_by = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault(), )
modified_by = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault(), )
....
class Meta:
model = models.Booking
fields = [
'title',
'date',
'duration',
'client',
'created_by',
'modified_by',
....
]
但是,我收到此错误:
AssertionError: Cannot call '.is_valid()' as no 'data=' keyword argument was passed when instantiating the serializer instance.
我知道序列化程序需要一个字典而不是实际的模态对象。但我不知道如何实现我想要的。验证模型对象。谁能建议正确的方法?
【问题讨论】:
-
modal 还是 model?
-
@cezar modEl。已更正。
-
@Todor 这是一个不同的问题。
标签: python django django-rest-framework django-serializer