Django DRF:为同一序列化程序上的每个CRUD操作分离字段
我有一个像这样的序列化程序Django DRF:为同一序列化程序上的每个CRUD操作分离字段,django,django-rest-framework,Django,Django Rest Framework,我有一个像这样的序列化程序 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):
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
- 在GET请求之后返回资源时,我只希望每一行(对象)使用'a'和'B'
- 当我在POST请求之后创建资源时,我必须包含一个强制性的第三个属性'C'
验证的\u数据中传递C,但当我创建MyModel
时,它最终没有C值,如上图所示
如果我在字段中添加了“C”
元组,那么一切都正常
有没有明智的方法来区分这两种情况?编写多个序列化程序(以便每个序列化程序定义不同的字段)对我来说太难看了。
拉米尔是对的。我非常想念那栋房子。最后,精确的解决方案是:
class MySerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ('A', 'B', 'C')
extra_kwargs = {'C': {'write_only': True}}
如果我没有在字段中包含'C',它就不会传入验证的\u数据
Ramiel是正确的。我非常想念那栋房子。最后,精确的解决方案是:
class MySerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ('A', 'B', 'C')
extra_kwargs = {'C': {'write_only': True}}
如果我没有在字段中包含“C”
它没有传入验证数据
如果我理解正确,你可以在Meta中使用DRF extra_kwargs,如图所示。如果我理解正确,你可以在Meta中使用DRF extra_kwargs,如图所示。非常感谢Ramiel。这就是我需要的。我还需要在字段
中包含id,以便存在于验证的\u数据中
。由于某种原因,当我删除所有.pyc文件时,先前包含任何内容的已验证_数据的行为不再是这种情况。我把最后的准确答案贴在下面,非常感谢你,拉米尔。这就是我需要的。我还需要在字段
中包含id,以便存在于验证的\u数据中
。由于某种原因,当我删除所有.pyc文件时,先前包含任何内容的已验证_数据的行为不再是这种情况。我把最后的确切答案贴在下面