Добавить поле модели в немодельный сериализатор в Django - PullRequest
1 голос
/ 19 октября 2019

Я использую 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, но полученный преобразован вdatabase объект после проверки.

Я попытался переопределить метод validate() и присвоить объект database полю database, но он выдает ошибку

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

1 Ответ

0 голосов
/ 19 октября 2019

Поскольку вы используете IntegerField для поля базы данных, вы должны вернуть int в качестве значения базы данных в методе validate, например 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...