2017-02-08 49 views
5

Chcę serializować model i dołączyć dodatkowe pole. Chcę używać tego serializatora do listy, szczegółów i tworzenia widoków. W seryjnym korzystam z metod create, update i get_field w celu dostosowania logiki.Dodatkowe pole serializera Django rest z postem i postem

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

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

Kiedy dodać nowy obiekt wszystko jest poprawne (walidacja mogę niestandardowe pole danych), ale kiedy się obiekt, „pole” nie istnieje w odpowiedzi.

EDYCJA: Chcę ustawić niestandardową metodę klasy serializer, aby uzyskać pole. To jest dla mnie lepsze rozwiązanie logiczne, a następnie ustawić niestandardową metodę na modelu.

Dlaczego tak jest? Czy istnieje lepsze rozwiązanie dla tego (nie chcę używać SerializerMethodField)?

Odpowiedz

1

Pole nie jest częścią modelu, ponieważ nadchodzi błąd. Możesz uczynić to pole write_only = True.Suppose pole dodatkowe.

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

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

lub możesz podać wartość źródłową pola stawów krzyżowych, do którego pola.

  1. Możemy zdefiniować metodę właściwości z tą nazwą pola. Możesz dołączyć to pole w serializatora jako tylko do odczytu żadnych danych można powrócić do tego

    class Example(model.MOdels): 
        @property 
        def field(self): 
        return #whatever you want to return 
    
  2. można wykorzystać pole serilizermethod.

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

Kiedy dodać atrybut źródłowego na polu musi mam niestandardową metodę na modelu. Chcę używać metody na klasy serializera. To dla mnie lepsza logika. Czy to jest możliwe? – SmoQ

+0

musisz podać just source argument w tym polu w formacie ciągu znaków. –