2015-12-02 92 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')