Python 在更新中隐藏指定字段,但不在创建中隐藏
我只想在创建表单中显示密码字段,但不想在更新表单中显示。如果我从UserSerializer中删除密码,它将不会以两种形式出现Python 在更新中隐藏指定字段,但不在创建中隐藏,python,django,django-rest-framework,Python,Django,Django Rest Framework,我只想在创建表单中显示密码字段,但不想在更新表单中显示。如果我从UserSerializer中删除密码,它将不会以两种形式出现 class UserSerializer(serializers.ModelSerializer): subscriptions = SubscriptionSerializer(many=True, read_only=True) password = serializers.CharField( style={'input_type'
class UserSerializer(serializers.ModelSerializer):
subscriptions = SubscriptionSerializer(many=True, read_only=True)
password = serializers.CharField(
style={'input_type': 'password'},
write_only=True
)
class Meta:
model = User
fields = '__all__'
def create(self, validated_data):
user = User.objects.create(**validated_data)
user.set_password(validated_data["password"])
user.save()
return user
若将实例提供给序列化程序,则可以删除密码字段。这意味着您将更新它的实例或序列化它。在这两种情况下,您都不需要密码字段
class UserSerializer(serializers.ModelSerializer):
subscriptions = SubscriptionSerializer(many=True, read_only=True)
password = serializers.CharField(
style={'input_type': 'password'},
write_only=True
)
class Meta:
model = User
fields = '__all__'
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if self.instance:
self.fields.pop('password')
def create(self, validated_data):
user = User.objects.create(**validated_data)
user.set_password(validated_data["password"])
user.save()
return user
您是否考虑过对不同的表单使用不同的序列化程序?我是否应该为此创建另一个视图集,还是可以对两个序列化程序使用相同的视图集?@YuriSales否,您只需要定义一个新的序列化程序。签出viewset的get_serializer_类方法。如果重写它,则可以根据请求动态分配Serializer类