我有模特
class File(models.Model):
name = models.CharField(max_length=30, default='.cc')
codefile = models.FileField(...)
使用序列化程序
class FileSerializer(serializers.ModelSerializer):
class Meta:
model = File
fields = ('id', 'name', 'codefile')
read_only_fields = ('id', 'name')
和视图集
class FileViewSet(viewsets.GenericViewSet,
mixins.ListModelMixin,
mixins.CreateModelMixin):
queryset = File.objects.all()
serializer_class = serializers.FileSerializer
def perform_create(self, serializer):
serializer.save(name=self.request.data['codefile'])
因此,通过转到localhost:8000 / files,我看到了所有File对象的列表,并且可以通过post上传新文件。
如何使用django rest框架实现详细视图,例如
localhost:8000 / files / 5
我会看到pk = 5的文件名和文件,并且可以选择更新/重新上传此代码文件吗?
答案 0 :(得分:2)
实际上,这很容易-由于您需要完整的REST操作,因此可以只继承ModelViewSet
的子类:
class FileViewSet(viewsets.ModelViewSet):
queryset = File.objects.all()
serializer_class = FileSerializer
def perform_create(self, serializer):
serializer.save(name=self.request.data['codefile'])
def perform_update(self, serializer):
serializer.save(name=self.request.data['codefile'])
我们只需要创建与您的perform_update
相同的perform_create
方法,即可在更改文件时更新name
字段。
答案 1 :(得分:0)
您可能想将此类添加到视图:
class FileDetail(generics.RetrieveAPIView):
queryset = File.objects.all()
serializer_class = FileSerializer
当然,您需要在url_patterns
中更新urls.py
。
我想您需要添加:
urlpatterns = [
...
path('file/<int:pk>/', views.FileDetail.as_view()),
...
]