drf mongoengine 序列化程序图像字段 none
drf mongoengine serializer imagefield none
我使用了 Django restframework 和 mongoengine。
这是我的模型和序列化器。
[model.py]
class Attachment(EmbeddedDocument):
attachment_id = SequenceField()
path = StringField()
path_small = StringField()
class Book(Document):
book_id = SequenceField()
user_id = LongField(required=True)
attachments = ListField(EmbeddedDocumentField(Attachment))
created_at = DateTimeField(default=datetime.now().replace(microsecond=0))
updated_at = DateTimeField(default=datetime.now().replace(microsecond=0))
[serializer.py]
from rest_framework_mongoengine.serializers import DocumentSerializer
from rest_framework.serializers import ImageField
from books.models.mongo import Book
class BookSerializer(DocumentSerializer):
image = ImageField()
class Meta:
model = Appeal
fields = (
'book_id',
'image',
)
这样的工作流程。
上传图片到s3
获取s3路径
将 s3 路径保存到 models.py 中的 attachments
字段。
所以不要在 models.py 中定义 ImageField()
的附件。
只需在序列化程序中设置 image = ImageField()
以验证它是正确的图像。
但是当我使用 serializer.is_valid()
验证时,图像得到 None
。
[views.py]
class BookList(GenericAPIView):
serializer_class = BookSerializer
queryset = ''
def post(self, request: Request) -> Union[Response, NoReturn]:
serializer = BookSerializer(data=request.data)
if serializer.is_valid():
print(serializer.data)
appeal = CreateAppealInteractor().execute(request=serializer.data)
return Response(status=status.HTTP_200_OK)
如你所知,在 serializer.is_valid()
之后,我打印了 serializer.data。
但它会像这样抛出 None -> {'book_id': 1, 'image': None}
我的代码有没有错误?
谢谢。
问题已在聊天室中解决。只需使用 validated_data
.
class BookList(GenericAPIView):
serializer_class = BookSerializer
queryset = ''
def post(self, request: Request) -> Union[Response, NoReturn]:
serializer = BookSerializer(data=request.data)
if serializer.is_valid():
appeal = CreateAppealInteractor().execute(request=serializer.validated_data)
return Response(status=status.HTTP_200_OK)
我使用了 Django restframework 和 mongoengine。
这是我的模型和序列化器。
[model.py]
class Attachment(EmbeddedDocument):
attachment_id = SequenceField()
path = StringField()
path_small = StringField()
class Book(Document):
book_id = SequenceField()
user_id = LongField(required=True)
attachments = ListField(EmbeddedDocumentField(Attachment))
created_at = DateTimeField(default=datetime.now().replace(microsecond=0))
updated_at = DateTimeField(default=datetime.now().replace(microsecond=0))
[serializer.py]
from rest_framework_mongoengine.serializers import DocumentSerializer
from rest_framework.serializers import ImageField
from books.models.mongo import Book
class BookSerializer(DocumentSerializer):
image = ImageField()
class Meta:
model = Appeal
fields = (
'book_id',
'image',
)
这样的工作流程。
上传图片到s3
获取s3路径
将 s3 路径保存到 models.py 中的
attachments
字段。
所以不要在 models.py 中定义 ImageField()
的附件。
只需在序列化程序中设置 image = ImageField()
以验证它是正确的图像。
但是当我使用 serializer.is_valid()
验证时,图像得到 None
。
[views.py]
class BookList(GenericAPIView):
serializer_class = BookSerializer
queryset = ''
def post(self, request: Request) -> Union[Response, NoReturn]:
serializer = BookSerializer(data=request.data)
if serializer.is_valid():
print(serializer.data)
appeal = CreateAppealInteractor().execute(request=serializer.data)
return Response(status=status.HTTP_200_OK)
如你所知,在 serializer.is_valid()
之后,我打印了 serializer.data。
但它会像这样抛出 None -> {'book_id': 1, 'image': None}
我的代码有没有错误?
谢谢。
问题已在聊天室中解决。只需使用 validated_data
.
class BookList(GenericAPIView):
serializer_class = BookSerializer
queryset = ''
def post(self, request: Request) -> Union[Response, NoReturn]:
serializer = BookSerializer(data=request.data)
if serializer.is_valid():
appeal = CreateAppealInteractor().execute(request=serializer.validated_data)
return Response(status=status.HTTP_200_OK)