2017-04-17 1 views
3

は私がDjangoの残りのフレームワークシリアライザCharFieldですが、ソースが

class Vehicle(models.Model): 
    name = models.CharField(max_length=100) 

    STATUS_CHOICES = (
     ("N", "New"), 
     ("U", "Used"), 
     ("P", "Just Purchased") 
    ) 
    status = models.CharField(max_length=3, choices=STATUS_CHOICES) 

をCharFieldです選択肢シリアライザクラスも読める値を表示するには、ステータスのCharFieldですが、source引数を指定しているとのモデルフィールドを持っている与えられたときに更新されない

class VehicleSerializer(ModelSerializer): 
    status = serializers.CharField(source='get_status_display') 

    class Meta: 
     model = Vehicle 

{'status': "U"}のパッチ要求で車両を更新しようとすると、更新は実行されません。 ただし、シリアライザステータスフィールドからsourceを削除すると、更新が行われます。 Webビューで適切な値を表示するには、ソースを指定する必要があります。

シリアライザのステータス名を別のものに変更し、テンプレート内でその名前を使用するオプションがあります。また、シリアライザの更新メソッドをオーバーライドするオプションがありますが、私の質問は、ソースが更新を防ぐために何をしているのですか?

答えて

0

メタのフィールドリストにステータスを追加する必要があると思います。

class VehicleSerializer(ModelSerializer): 
    status = serializers.CharField(source='get_status_display') 

    class Meta: 
     model = Vehicle 
     fields = ('status',) 
+0

ステータスは、モデルのフィールドのフィールドと同じ名前であるため、デフォルトで追加されます。 –

+0

ソースを追加すると、フィールドが読み取り専用になっているようです。 – hspandher

関連する問題