ValidationError - Django Q Query - не является действительным UUID

Я пытаюсь получить значение из модели пользователя, мое требование заключается в том, что or условие должно быть в том же запросе.

User.objects.get(
    Q(premium_referral=form.cleaned_data.get('referral_code')) | 
    Q(id=form.cleaned_data.get('referral_code'))
)

Но он выдает ошибку

ValidationError at /register
['“XUSB5” is not a valid UUID.']

Приведенный выше запрос отлично работает для id, но не для premium_referral поля

Ниже представлена модель

class User(AbstractBaseUser):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    premium_referral = models.CharField(('Premium Referral Code'), max_length=30, null=True,blank=True, unique=True)

Это происходит потому, что id (или premium_referral) является UUIDField [Django-doc]. Поэтому не имеет особого смысла передавать XUSB5 в качестве кода, так как это недопустимый UUID).

Можно проверить, можно ли преобразовать его в UUID и таким образом отфильтровать с помощью:

from uuid import UUID

query = form.cleaned_data.get('referral_code')
qobj = Q(premium_referral=query)
try:
    qobj |= Q(id=UUID(query))
except ValueError:
    pass

User.objects.get(
    qobj
)
Вернуться на верх