Я добавил новое FileField 'photo' в мою существующую модель и перенес базу данных. Когда я пытаюсь вернуть данные с помощью DRF, я получаю сообщение об ошибке «ValueError: Атрибут 'photo' не связан с файлом». Столбец фотографии содержит пустые значения.
Поле должно быть необязательным.
models.py:
def photo_directory_path(instance, filename):
return 'photos/{0}/{1}'.format(instance.id, filename)
class MyModel(models.Model):
...
photo = models.FileField(blank = True, editable = True, upload_to=photo_directory_path)
...
class MyModel_l10n(models.Model):
...
mymodel = models.ForeignKey(MyModel, on_delete=models.CASCADE, related_name='%(class)s_mymodel')
...
serializers.py:
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ['photo']
class MyModel_l10nSerializer(serializers.ModelSerializer):
photo = serializers.ReadOnlyField(source='mymodel.photo', required = False, allow_null = True)
class Meta:
model = MyModel_l10n
fields = ['photo', ...]
views.py:
res = MyModel_l10n.objects.filter(...)
serializer = MyModel_l10nSerializer(res, many=True)
return Response (serializer.data)
сообщение об ошибке:
ValueError: The 'photo' attribute has no file associated with it.
РЕДАКТИРОВАТЬ: проблема сохраняется, я устанавливаю поля NULL = True и сделать столбец NULL. Кроме того, в том числе обязательный = False для сериализаторов. ReadOnlyField не помог.
Проблема возникает только с MyModel_l10n. Если я сериализую MyModel, отсутствующий файл не будет выпущен.