【发布时间】:2020-01-01 11:39:17
【问题描述】:
我有一个简单的文件模型
class Documents(models.Model):
""" uploaded documents"""
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
upload = models.FileField(storage=PrivateMediaStorage())
filename = models.CharField(_('documents name'), max_length=255, blank=True, null=True)
datafile = models.FileField()
created = models.DateTimeField(auto_now_add=True)
type = models.ForeignKey(Doctype, on_delete=models.CASCADE, blank=True)
为了显示上传文件列表和添加新文件,我使用了类
class DocumentsListView(viewsets.ViewSetMixin,generics.ListCreateAPIView):
queryset = Documents.objects.all()
serializer_class = DocumentsSerializer
def perform_create(self, serializer):
serializer.save(author=self.request.user)
serializer.py
class DocumentsSerializer(AwsUrlMixin, serializers.ModelSerializer):
type_name = serializers.CharField(source='type.type', read_only=True)
type = serializers.PrimaryKeyRelatedField(queryset=Doctype.objects.all())
view_file = serializers.SerializerMethodField()
author = serializers.CharField(source='author.username', read_only=True)
created = serializers.DateTimeField(format=date_format, input_formats=None, default_timezone=None, read_only=True)
class Meta:
model = Documents
fields = ('id', 'author', 'filename', 'datafile', 'type', 'type_name', 'created', 'view_file')
我使用标准的 DRF 界面,并正常显示所有内容并将新文件添加到数据库中。
在阅读文档时,我遇到了 MultipartParser、FileUploadParser 等解析器,它们也用于添加新文件。 我无法理解何时使用它们以及它们执行什么功能,因为现在没有它们一切正常。
文档没有让我清楚地了解何时需要使用解析器。
我尝试添加
parser_classes = (MultiPartParser, FileUploadParser)
到views.py,没有任何改变。一切都像以前一样工作。 如果你能对我说清楚,我将不胜感激。
【问题讨论】:
-
阅读this了吗?如果是这样,您将看到解析器是全局设置的,或者可以在视图中覆盖(而不是在序列化器中)。他们基本上确保视图接收到的请求正文被解析并转换为可由序列化程序处理的python对象(通常是字典),反之亦然。请让我们知道您具体不了解本文档的哪一部分。
-
@dirkgroten 我写错了,我将 parser_classes 添加到序列化程序中,当然是在视图中。我不清楚在没有解析器的情况下是否一切正常,为什么我需要它们,何时必须将它们添加到视图中,什么时候可以不使用它们?将解析器添加到视图后发生了什么变化?
标签: django django-rest-framework django-serializer