我正在使用 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'
答案 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