Django Detail Просмотр и обновление Filefield - PullRequest
0 голосов
/ 19 мая 2019

У меня есть модель

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-объектов и могу загружать новые файлы по почте.

Как я могу реализовать детальный вид с помощью подставки django rest, такой что на

localhost: 8000 / files / 5

Я бы увидел имя и файл файла с pk = 5 и с возможностью обновления / повторной загрузки этого кодового файла?

Ответы [ 2 ]

2 голосов
/ 19 мая 2019

На самом деле это очень просто - так как вам нужны полные действия 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 при изменении файла.

0 голосов
/ 19 мая 2019

Вы можете добавить этот класс в ваше представление:

class FileDetail(generics.RetrieveAPIView):
    queryset = File.objects.all()
    serializer_class = FileSerializer

и, конечно, вам нужно обновить url_patterns в вашем urls.py.

Я думаю,вам нужно добавить:

urlpatterns = [
    ...
    path('file/<int:pk>/', views.FileDetail.as_view()),
    ...
]
...