【问题标题】:Django rest nested serializer validation by idDjango rest 嵌套序列化程序通过 id 验证
【发布时间】:2015-12-02 18:49:48
【问题描述】:

我有以下 django-rest 序列化程序:

class FileSerializer(serializers.ModelSerializer):
    class Meta:
        model = FileModel
        fields = ('id', '_file')

class SomeSerializer(serializers.ModelSerializer):
    files = FileSerializer(many=True, required= False)
    class Meta:
        model = SomeModel
        fields = ('id', 'files')

和模型

 class File(models.Model):
      some_obj = models.ForeignKey('SomeObj',related_name='files', blank=True, null=True)
      _file = models.FileField(upload_to=get_file_path)

问题来了,当我使用现有的 File 对象创建 SomeSerializer 时

s = SomeSerializer(data = {'files': [{'id' : 1}]})
s.is_valid()
s.errors

返回

False
{'_file': [u'No file was submitted.']}

如何解决这个问题?谢谢。

【问题讨论】:

  • 你能展示你的models.py吗?

标签: django rest django-rest-framework


【解决方案1】:

嗯,信息很明显。您不向序列化程序提供“_file”。这应该可以解决:

s = SomeSerializer(data = {'files': [{'id' : 1, '_file': <somedata>}]})

【讨论】:

  • 我不需要向 id=1 的现有文件对象提供任何数据。
  • 然后你需要根据你的需要调整你的字段约束。
【解决方案2】:

_file 字段缺失,如果不需要,请将required 设置为False

class FileSerializer(serializers.ModelSerializer):
    _file = serializer.FileField(required=False)

    class Meta:
        model = FileModel
        fields = ('id', '_file')

【讨论】:

    猜你喜欢
    • 2018-07-06
    • 2020-03-21
    • 2016-11-21
    • 2018-07-07
    • 2019-01-16
    • 2016-05-14
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多