2015-12-02 62 views
0

休息嵌套串行验证我有以下Django的休息串行:Django的通过ID

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) 

问题来了,当我创建SomeSerializer与现有的文件对象

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

返回

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

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

+0

你能证明你的models.py? –

回答

0

那么,这个消息是非常明显的。您不提供“_file”给序列化程序。这应该可以解决:

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

我不需要为id = 1的**现有**文件对象提供任何数据。 – foo

+0

然后,您需要将您的字段约束与您想要的对齐。 – Linovia

0

_file场丢失,那么如果不是必需的,但设置requiredFalse

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

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