Вы можете условно аннотировать ваш набор запросов, чтобы получить новое поле с желаемым значением, а затем использовать это поле в предложении filter
или order_by
.Например, вы можете сделать следующее:
from django.db.models import CharField, Value as V, F, Q, Case, When
from django.db.models.functions import Concat
Product.objects.annotate(
new_product_code=Case(
When(product_code__iregex=r'^[A-Z]+.*', # If it starts with letters
then=Concat(V('0000'), 'product_code', output_field=CharField()) # Then prepend four 0's
),
default=F('product_code') # Else, the original value
)
).filter(new_product_code__lte='whatever you like') # Now filter by using your new value
Соответствующими частями документации являются условные выражения , функции базы данных и Справочник по API QuerySet