DRF: разрешить все поля в запросе GET, но ограничить POST только одним полем

Давайте разберемся с этим на примере.

Скажем, я хочу создать FileUploader API, где он будет хранить поля, такие как id, file_path, file_name, size, owner и т. Д. В базе данных. Смотрите образец модели ниже:

class FileUploader(models.Model):
    file = models.FileField()
    name = models.CharField(max_length=100) #name is filename without extension
    version = models.IntegerField(default=0)
    upload_date = models.DateTimeField(auto_now=True, db_index=True)
    owner = models.ForeignKey('auth.User', related_name='uploaded_files')
    size = models.IntegerField(default=0)

Теперь для API это то, что я хочу:

GET: Когда я запускаю конечную точку GET, я хочу, чтобы все вышеперечисленные поля были для каждого загруженного файла.

POST: Но для пользователя, чтобы создать / загрузить файл, почему он должен беспокоиться о пропуске всех этих полей. Она может просто загрузить файл, а затем, я полагаю, сериализатор может получить остальные поля из загруженного файла.

Searilizer: Вопрос: Я создал ниже сериализатор, чтобы служить моей цели. Но не уверен, что это правильный способ его реализации.

class FileUploaderSerializer(serializers.ModelSerializer):
    #overwrite = serializers.BooleanField()
    class Meta:
        model = FileUploader
        fields = ('file','name','version','upload_date', 'size')
        read_only_fields = ('name','version','owner','upload_date', 'size')

    def create(self, validated_data):
        return FileUploader.objects.create(**validated_data)

Просмотр для справки:

class FileUploaderViewSet(viewsets.ModelViewSet):
    serializer_class = FileUploaderSerializer
    parser_classes = (MultiPartParser, FormParser,)

    # overriding default query set
    queryset = LayerFile.objects.all()

    def get_queryset(self, *args, **kwargs):
        qs = super(FileUploaderViewSet, self).get_queryset(*args, **kwargs)
        qs = qs.filter(owner=self.request.user)
        return qs

Также,Другой вопрос Я хочу, чтобы пользователь предоставил дополнительный параметр, называемый «перезаписать» (если файл уже существует на сервере).

Я не уверен, как получить доступ к этому в сериализаторе.

Ответы на вопрос(0)

Ваш ответ на вопрос