2013-12-09 64 views
6

我的串行,很基本的:REST框架串行總是返回False的is_valid

class TestSerializer(serializers.Serializer): 
    date_time = serializers.DateTimeField() 

想從外殼嘗試,但每次我試圖檢查其驗證我得到False

> import datetime 
> s=TestSerializer({'date_time': datetime.datetime(year=2012,month=12,day=12)} 
> s.data 
{'date_time': datetime.datetime(2012, 12, 12, 0, 0)} 
> s.is_valid() 
False 
> s.errors 
{u'non_field_errors': [u'No input provided']} 

這是爲什麼?到底是怎麼回事?

+0

我最終在這裏與oposit問題。序列化程序總是有效的,因爲混合序列化程序與ModelSerializer .... – andi

+0

@andi我認爲你應該提出一個新的問題,包括你的代碼。 – Salyangoz

回答

6

我認爲你需要明確指定數據:

s = TestSerializer(data={'date_time': datetime.datetime(year=2012,month=12,day=12)} 

否則假定第一個參數是一個模型實例,但這裏並非如此。

+0

這似乎是如此。但是當'data'被明確給出時,那麼s.data值會給出'None'。當我這樣做: – Salyangoz

+3

@Salyangoz這是預期的行爲,以防止在驗證之前意外訪問數據。正如文檔中所說的,你需要在's.data'獲得一個值之前調用'is_valid()'。在此之前,它確實是'沒有'。 –