2017-02-08 22 views
5

Tôi muốn sắp xếp một mô hình và bao gồm thêm trường. Tôi muốn sử dụng serializer này cho danh sách, chi tiết và tạo các khung nhìn. Trong serialializer tôi sử dụng các phương thức create, update và get_field để tùy chỉnh logic.Django phần còn lại khuôn khổ trường serializer thêm với nhận và đăng

class ExampleSerializer(serializers.ModelSerializer): 
    field = serializers.CharField() 

    class Meta: 
     model = Example 
     fields = ("field", ...) 

Khi tôi thêm mới đối tượng tất cả mọi thứ là chính xác (tôi có thể xác nhận dữ liệu lĩnh vực tùy chỉnh), nhưng khi tôi nhận được đối tượng, 'trường' không tồn tại trong phản ứng.

EDIT: Tôi muốn đặt phương thức tùy chỉnh trên lớp bộ nối tiếp để nhận trường. Đây là giải pháp logic tốt hơn cho tôi sau đó đặt phương thức tùy chỉnh trên mô hình.

Tại sao lại như vậy? Có tồn tại giải pháp tốt hơn cho điều này (tôi không muốn sử dụng SerializerMethodField)?

Trả lời

1

Trường không phải là một phần của mô hình, do đó là lỗi sắp xảy ra. Bạn có thể làm cho trường write_only = True.Suppose đó là trường bổ sung.

class ExampleSerializer(serializers.ModelSerializer): 
    field = serializers.CharField(write_only=true) 

    class Meta: 
     model = Example 
     fields = ("field", ...) 

hoặc bạn có thể cung cấp giá trị nguồn trường chéo ao vào trường đó.

  1. Chúng tôi có thể xác định phương thức thuộc tính với tên trường đó. Bạn có thể bao gồm rằng trường trong serializer như chỉ đọc bất kỳ dữ liệu bạn có thể trả cho điều đó

    class Example(model.MOdels): 
        @property 
        def field(self): 
        return #whatever you want to return 
    
  2. bạn có thể sử dụng trường serilizermethod.

    class ExampleSerializer(serializers.ModelSerializer): 
        field = serializers.serializerMethod() 
    
        class Meta: 
         model = Example 
         fields = ("field", ...) 
         def get_field(self, obj): 
          return obj.data 
    
+0

Khi tôi thêm thuộc tính nguồn trên sân Tôi phải có phương pháp tùy chỉnh trên mô hình. Tôi muốn sử dụng phương pháp trên lớp serializer. Đó là logic tốt hơn cho tôi. Điều đó có thể không? – SmoQ

+0

bạn phải đưa ra đối số nguồn trong trường đó ở định dạng chuỗi. –

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