【发布时间】:2020-02-20 22:14:15
【问题描述】:
我在现有模型中添加了一个新的 FileField“照片”并迁移了数据库。当我尝试使用 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 并使列为空。 此外,在 serializers.ReadOnlyField 中包含 required = False 也无济于事。
这个问题只发生在 MyModel_l10n 上。如果我序列化 MyModel,则丢失的文件不是问题。
【问题讨论】:
-
FileField不应该有null=True吗? -
@radoh 我也测试过。
标签: django django-models django-rest-framework