2015-04-13 38 views
13

Trong DRF v3.1, tôi có một serializer lồng nhau giống như một chi tiết trong tài liệu - http://www.django-rest-framework.org/api-guide/serializers/#dealing-with-nested-objectsDjango Nghỉ ngơi Khung lồng Serializer cần lỗi = False

class SerializerA(serializers.Serializer): 
    details = DetailsSerializer(required=False) 

Tuy nhiên, khi cố gắng sử dụng serializer này và không cung cấp chi tiết, tôi nhận được các thông tin sau:

{u'details': [u'This field may not be null.']} 

Điều này có vẻ không đúng với tài liệu?

Có ai khác bắt gặp điều này hoặc có thể xác minh điều này dưới dạng lỗi không?

+1

Đầu ra liên quan của 'repr (SerializerA())' là gì? Bạn có thể muốn đặt 'allow_null' cho' DetailsSerializer'. –

+0

Xin chào, đầu ra là 'SerializerA(): chi tiết = DetailsSerializer (bắt buộc = False): a = CharField (max_length = 100, min_length = 1, required = True)' –

+0

Ngoài ra, theo tài liệu, Nếu lồng nhau đại diện có thể tùy ý chấp nhận giá trị None, bạn nên chuyển cờ yêu cầu = False tới bộ nối tiếp lồng nhau. Với tôi điều này có nghĩa là tôi không yêu cầu param allow_null? –

Trả lời

31

Ok, vì vậy bình luận của Kevin Browns là chính xác. Tôi cần thêm allow_null = True.

class SerializerA(serializers.Serializer): 
    details = DetailsSerializer(required=False, allow_null=True) 

Lý do cho điều này là yêu cầu = False cho phép các chi tiết trường không có trong dữ liệu khi tạo bộ nối tiếp.

ví dụ: s = SerializerA(data={})

trong khi allow_null cho phép thông số được chỉ định nhưng không có giá trị.

ví dụ: s = SerializerA(data={'details': None})

Điều này mở ra một vấn đề khác với API có thể duyệt DRF, nhưng tôi sẽ hỏi trong một câu hỏi khác.

Các vấn đề liên quan