DRF: permite todos los campos en la solicitud GET pero restringe POST a un solo campo

Vamos a entenderlo con el ejemplo.

Digamos, quiero crear la API FileUploader, donde almacenará campos como id, file_path, file_name, size, owner, etc. en la base de datos. Vea el modelo de muestra a continuación:

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)

Ahora, para las API esto es lo que quiero:

GET: cuando disparo el punto final GET, quiero todos los campos anteriores para cada archivo cargado.

POST: Pero para que el usuario cree / cargue un archivo, ¿por qué tiene que preocuparse por pasar todos estos campos? Simplemente puede cargar el archivo y luego, supongo, el serializador puede obtener el resto de los campos del ARCHIVO cargado.

Searilizer: Pregunta: Creé a continuación el serializador para cumplir mi propósito. Pero no estoy seguro si es la forma correcta de implementarlo.

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)

Vista para referencia:

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

También,otra pregunta es que quiero que el usuario proporcione un parámetro adicional llamado 'sobrescribir' (si el archivo ya existe en el servidor).

No estoy seguro de cómo acceder a eso en el serializador.

Respuestas a la pregunta(0)

Su respuesta a la pregunta