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
)