【发布时间】:2020-05-23 16:51:53
【问题描述】:
我想问一下如何正确使用 Django REST Framework (DRF) ModelSerializers 来从模型序列化。
我有两个必填字段的 Django 模型:
class Book(models.Model):
title = models.CharField()
desc = models.CharField()
我有 DRF ModelSerializer:
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ['title', 'desc']
我可以使用以下方法对传入的请求进行反序列化和验证:
serializer = BookSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
但是如何序列化和发送响应呢? DRF 允许我断开使用 ModelSerializer 建立的联系。如果我忘记设置必填的 Book 字段之一,它仍然会通过 BookSerializer!
invalid_book = Book(title="Foo") # but forgotten to set "desc"
serializer = BookSerializer(instance=invalid_book)
serializer.data # it contains book without required "desc"
如果我尝试is_validate(),使用实例参数创建的序列化会引发错误。
为什么 ModelSerializer 可以验证传入的数据,但不能传出?
【问题讨论】:
-
当您的验证器在保存它们时没有捕获它们时,会保存数据库中的无效数据。因此,您应该对此进行处理,以免在您的数据库中保存无效数据。顺便说一句,当数据无效时你想做什么?