将模型字段添加到Django中的非模型序列化器

时间:2019-10-19 07:11:47

标签: django django-rest-framework

我正在使用 Django 2.x

我有一个用于验证请求的序列化器。 (不是ModelSerializer)

class ExecuteSerializer(serializers.Serializer):

    database = serializers.IntegerField(required=True)
    query = serializers.CharField(required=True)

    user = serializers.HiddenField(
        default=serializers.CurrentUserDefault()
    )

    def validate(self, attrs):
        user = attrs.get('user', None)

        try:
            database = Database.objects.get(pk=attrs.get('database', None), collection__user=user)
        except Database.DoesNotExist:
            raise ValidationError({
                'database': ['Does not exists']
            })

        attrs['database'] = database
        return attrs

database是对Database模型的引用。

我希望用户在database字段中传递数据库ID,但在验证后将其转换为database对象。

我尝试覆盖validate()方法并将database对象分配给database字段,但它给出了错误

TypeError: int() argument must be a string, a bytes-like object or a number, not 'Database'

1 个答案:

答案 0 :(得分:0)

由于您将IntegerField用于数据库字段,因此应在validate方法中将int作为数据库值返回,例如database.id:

def validate(self, attrs):
    user = attrs.get('user', None)

    try:
        database = Database.objects.get(pk=attrs.get('database', None), collection__user=user)
    except Database.DoesNotExist:
        raise ValidationError({
            'database': ['Does not exists']
        })

    attrs['database'] = database.id  # fix is here
    return attrs