2017-02-08 37 views
5

Bir modeli serileştirmek ve fazladan alan eklemek istiyorum. Liste, detay ve görünüm oluşturmak için bu seriyi kullanıyorum. Diziselleştiricide, mantığı özelleştirmek için oluşturma, güncelleme ve get_field yöntemleri kullanıyorum.Django rest framework extra serializer alanı olsun ve gönderin

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

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

Yeni nesne her şey (özel alan veri doğrulama olabilir) doğru olduğundan eklediğinizde, ama nesne olsun, 'alan' yapamaz tepki var.

DÜZENLEME: Alan almak için serializer sınıfında özel yöntem ayarlamak istiyorum. Bu benim için daha iyi bir mantıksal çözüm ve daha sonra modele özel bir yöntem ayarla.

Neden böyle? Bunun için daha iyi bir çözüm var mı (SerializerMethodField kullanmak istemiyorum)?

cevap

1

Bu alanın nedeni, alanın modelin bir parçası değil. Bu alanı write_only = True.Squpose alanı fazladan alan yapabilirsiniz. veya kaynak değerini alan çapraz havuzlarına hangi alana verebilirsiniz.

    Biz o alan adı ile mülkiyet yöntemini tanımlayabilirsiniz
  1. . Eğer serilizermethod alanı kullanabilirsiniz o

    class Example(model.MOdels): 
        @property 
        def field(self): 
        return #whatever you want to return 
    
  2. için dönebilirsiniz sadece herhangi bir veri okurken serileştiriciye içinde bu alanı içerebilir.

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

Ben modeline özel yöntemi olmalıdır sahada kaynak niteliğini eklediğinizde. Seri hale getirici sınıfında kullanım yöntemi istiyorum. Bu benim için daha mantıklı. Mümkün mü? – SmoQ

+0

Bu alanda dize formatında sadece kaynak argüman vermelisiniz. –