【发布时间】:2017-01-07 13:38:23
【问题描述】:
我意识到标题听起来很傻,但我希望能够为我的 User 实例更改对 Group 对象的引用。但我不希望他们能够创建新组或编辑现有组。我想我想要的是一个只读的嵌套字段。但是,如果我将其设置为read_only=True,我不会在我的序列化程序验证数据中获得数据。如果我将它设置为read_only=False,那么它会尝试创建一个新的Group,而不是仅仅更改引用。
class GroupSerializer(serializers.ModelSerializer):
permissions = PermissionSerializer(many=True)
class Meta:
model = Group
fields = (
'pk',
'name',
'permissions',
)
class UserSerializer(serializers.ModelSerializer):
groups = GroupSerializer(many=True)
....
class Meta:
model = User
exclude = (
....
)
def update(self, instance, validated_data):
print(validated_data)
return instance
def validate_groups(self, value):
print("validating groups")
....
return value
read_only=True 什么都不会发生。我让用户回到我的PATCH 请求,但用户完全一样。使用read_only=False 我收到验证错误返回给我{'groups': [{'name': ['group with this name already exists.']}]}
我也尝试过覆盖GroupSerializer 上的create 和update 方法,但没有任何变化。
至多,我希望GroupSerializer 只是为了验证数据中的组是否存在。
【问题讨论】:
标签: django python-3.x django-rest-framework