Django Form говорит, что поле изображения является обязательным, в то время как изображение загружено в клиенте Graphql Altair
Я использую GraphQL в проекте Django и клиент Altair GraphQL, и я столкнулся с проблемой загрузки файлов.
Когда запрос отправляется через Altair, отправленные поля обнаруживаются в моем ImageUploadMutation. После инициализации формы с полями (form = ArtistPhotoForm({'photo': file})), form.data также выводит нужные поля.
Однако после вызова метода form.is_valid() я получаю photo: This field is required!
Ниже приведены важные сегменты кода:
models.py
class ArtistPhoto(models.Model):
# Use width_field and height_field to optimize getting photo's width and height
# This ThumnailerImageField is from easy_thumbnails; but i don't think the issue is here
photo = ThumbnailerImageField(
thumbnail_storage=FILE_STORAGE_CLASS(),
upload_to=ARTISTS_PHOTOS_UPLOAD_DIR,
resize_source=dict(size=(1800, 1800), sharpen=True),
validators=[FileExtensionValidator(['png, jpg, gif'])],
width_field='photo_width',
height_field='photo_height'
)
photo_width = models.PositiveIntegerField()
photo_height = models.PositiveIntegerField()
forms.py
class ArtistPhotoForm(forms.ModelForm):
class Meta:
model = ArtistPhoto
fields = ['photo']
mutation
# Output class contains the fields success and errors
class ImageUploadMutation(graphene.Mutation, Output):
class Arguments:
file = Upload(required=True)
form_for = ImageFormEnum(required=True)
# Apparently this should be an instance method not a class method
@verification_and_login_required
def mutate(self, info, file: InMemoryUploadedFile, form_for, **kwargs):
if form_for == 'artist_photo':
form = ArtistPhotoForm({'photo': file})
if form.is_valid():
print("Form is valid")
print(form.cleaned_data)
return ImageUploadMutation(success=True)
print(form.errors)
return ImageUploadMutation(success=False, errors=form.errors.get_json_data())
Я получаю сообщение об ошибке
{
"data": {
"imageUpload": {
"success": false,
"errors": {
"photo": [
{
"message": "This field is required.",
"code": "required"
}
]
}
}
}
}
Я знаю, что могу обойти это, вручную выполняя валидацию непосредственно в классе мутации, но, пожалуйста, хотя бы кто-нибудь может объяснить мне источник этой ошибки и как ее решить?
