我有一个看起来像这样的序列化程序
class MySerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ('A', 'B')
# 'C' is mandatory to create the object but dont include it on GET
def create(self, validated_data):
# validated_data contains C ...
instance = MyModel(**validated_data)
print instance.__dict__ # C is None !?!?!
instance.save()
return instance
视图正常工作并在validated_data
内传递 C ,但是当我创建MyModel
时,它最终没有C值,如上所示。
如果我在fields
元组中添加'C',那么一切正常......
是否有明智的方法来区分这两种情况?编写多个序列化器(以便每个定义不同的字段)对我来说似乎太难看了。
答案 0 :(得分:3)
http://www.django-rest-framework.org/api-guide/fields/#write_only
class MySerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ('A', 'B', 'C')
extra_kwargs = {'C': {'write_only': True}}
答案 1 :(得分:-1)
拉米尔是对的。我错过了extra_kwargs中的那个属性。最后,确切的解决方案是:
class MySerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ('A', 'B', 'C')
extra_kwargs = {'C': {'write_only': True}}
如果我不包含“C' fields
validated_data
未传递{{1}}。