DRF doesn't change the media type of request body to multipart/form-data automatically
I maintainer di solito rispondono entro 1 giorno
@knivets ci sta già lavorando.
Dal 10/8/2019.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Ambito
- api, documentation
Direzione di ricerca
Riproduci l’esempio da view.py e urls.py, quindi esegui ./manage.py generateschema e confronta l’output di requestBody con il documento OpenAPI previsto. Traccia la generazione dello schema per FileField e le richieste multipart; il lavoro è completato quando gli schemi delle richieste usano multipart/form-data con format: binary, mentre gli schemi delle risposte rimangono validi per il loro tipo di media.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Checklist
- I have verified that that issue exists against the
masterbranch of Django REST framework. - I have searched for similar issues in both open and closed tickets and cannot find a duplicate.
- This is not a usage question. (Those should be directed to the discussion group instead.)
- This cannot be dealt with as a third party library. (We prefer new functionality to be in the form of third party libraries where possible.)
- I have reduced the issue to the simplest possible case.
- I have included a failing test as a pull request. (If you are unable to do so we can still accept the issue.)
Steps to reproduce
# view.py
from rest_framework import generics
from rest_framework import serializers
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
class BookSerializer(serializers.ModelSerializer):
cover = serializers.FileField()
class Meta:
model = Book
fields = ('cover',)
class BooksView(generics.CreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
# urls.py
urlpatterns = [
...
path('api/books/', views.BooksView.as_view()),
...
]
Expected behavior
./manage.py generateschema
openapi: 3.0.2
info:
title: ''
version: TODO
paths:
/api/books/:
post:
operationId: CreateBook
parameters: []
requestBody:
content:
multipart/form-data:
schema:
required:
- cover
properties:
cover:
type: string
format: binary
responses:
'200':
content:
application/json:
schema:
required:
- cover
properties:
cover:
type: string
Actual behavior
./manage.py generateschema
openapi: 3.0.2
info:
title: ''
version: TODO
paths:
/api/books/:
post:
operationId: CreateBook
parameters: []
requestBody:
content:
application/json:
schema:
required:
- cover
properties:
cover:
type: string
responses:
'200':
content:
application/json:
schema:
required:
- cover
properties:
cover:
type: string
There are two things going on here:
- There is no support for automatic
multipart/form-datamedia type generation - The
FileFieldgenerates incomplete OpenAPI schema: it doesn't includeformat: binary. Finally, it should only generateformat: binaryfor requests, since you can't have a binary string field withinapplication/jsonmedia type. We could probably add aformat: uriin caseuse_url=True.
https://swagger.io/docs/specification/describing-request-body/multipart-requests/
On unrelated note I noticed that DRF doesn't put type: object under schema even though this spec passes validation here
- Lingua principale
- Python
- Stelle
- 30.2k
- Fork
- 7.1k
- Merge medio
- 1g 20h
- PR unite (30g)
- 19
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di encode/django-rest-framework
-
Documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
encode/django-rest-framework#3460 · 37 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
a viewset's action list gets "head" added to it, but only after being called at least onceForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 48/100
encode/django-rest-framework#9747 · 8 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Performance issue: N+1 queries and slow validation when using many=True with serializers containing relational fieldsForse già presa @adelkhayata76 l’ha presa 121 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
encode/django-rest-framework#9607 · 14 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
BookListSerializer example for create case is still flawedForse già presa @AyushDharDubey l’ha presa 645 giorni fa. Apertastale
Difficoltà 2/5 1-3 ore Idoneità per principianti 48/100
encode/django-rest-framework#9469 · 4 commenti · 2 reazioni ·
I maintainer di solito rispondono entro 1 giorno
-
Not possible to override serializer_field_mappings with a field that has choices (for example a from ChoiceField derived field)Forse già presa @G-Glitch404 l’ha presa 9 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 65/100
encode/django-rest-framework#9179 · 9 commenti ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di encode/django-rest-framework
Issue simili
-
bot-triaged module: LrScheduler module: optimizer triaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
documentation glm5 llm-model
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
vllm-project/vllm-ascend#19062 ·
I maintainer di solito rispondono entro 1 giorno
-
Author Page: shuai-zhao-llmApertaauthor-page correction
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
acl-org/acl-anthology#10496 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Issue Type: Bug Report
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
celery/celery#10875 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
SasanLabs/VulnerableApp#836 ·
I maintainer di solito rispondono entro 1 giorno