小编Nat*_*rke的帖子

允许serializers.ListField中的空列表

我正在使用Django REST框架3.3并尝试使用框架中包含的提供的serializers.ListField类来序列化可能为空的列表.我目前对该字段的实例化看起来像这样

 countrypreferences = serializers.ListField(child=serializers.IntegerField(),
                                            source='country_preference_ids',
                                            allow_null=True)
Run Code Online (Sandbox Code Playgroud)

在测试API时,如果我让字段为空列表,我似乎总是得到400响应.看起来这种功能会很常见,但我找不到允许空列表的方法.谢谢!

django rest django-rest-framework

5
推荐指数
1
解决办法
2600
查看次数

为ModelSerializer使用Super create方法

我试图通过在类的扩展中使用ModelSerializer的create方法来保存一些工作,然后在扩展中添加我需要的额外字段.当我这样做时,我从DRF收到一个错误,指出不支持嵌套序列化程序中的可写字段.有没有办法实现这一点,以便我不必显式定义create方法中的每个字段,而是将该工作推送到超级构造函数?包括我的代码:

class CreateUserSerializer(ModelSerializer):
    school = SchoolSerializer(required=False) 

    class Meta:
        model = User
        fields = ('id', 'username', 'password', 'first_name', 'last_name',
              'user_type', 'school', 'email')
        extra_kwargs = {
            'password': {'write_only': True},
            'user_type': {'read_only': True}
        }

    def create(self, validated_data):
        original_validated_data = validated_data.copy()
        if 'password' in validated_data:
            password = validated_data.pop('password')

        user = super(CreateUserSerializer, self).create(validated_data)
        if 'password' in original_validated_data:
            user.set_password(original_validated_data['password'])
        if 'school' in original_validated_data:
            user.user_type = User.TYPE_ADVISOR

        return user
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

File "/serializers/user.py", line 41, in create
  user = super(CreateUserSerializer, self).create(validated_data)
File "/lib/python2.7/site-packages/rest_framework/serializers.py", line 832, in create
  raise_errors_on_nested_writes('create', …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework django-rest-auth

2
推荐指数
1
解决办法
5411
查看次数