Попробуйте использовать '.extra', чтобы выбрать свой const в качестве поля, чем использовать myconst__contains, например:
queryset.extra(select={'myconst': "'this superstring is myconst value'"}).filter(myconst__contains=F('myfield'))
Не забудьте поставить постоянное значение в апострофах внутри двойных кавычек.
Но кто-нибудь поможет мне поместить его в объект Q? =)
UPD:
Неожиданно происходит сбой из-за следующей проблемы:
https://code.djangoproject.com/ticket/13363
Может быть, они это исправят.
UPD: Вы можете фильтровать по полям, которые добавлены с помощью .annotate, но я не знаю, как поставить константу здесь вместо агрегирования. Может быть, с созданием пользовательской функции агрегации, как здесь:
http://coder.cl/2011/09/custom-aggregates-on-django/
UPD: я сделал собственный агрегатор, эта логика кажется правильной, потому что запрос, полученный из набора запросов, очень похож на тот, который я хотел, но, к сожалению, есть другая проблема: 16731 (извините, не предоставил полный URL , недостаточно репутации, см. другой билет выше).
UPD (последний): мне удалось сделать это с помощью monkeypatching следующего:
- django.db.models.sql.Query.query_terms
- django.db.models.fields.Field.get_prep_lookup
- django.db.models.fields.Field.get_db_prep_lookup
- django.db.models.sql.where.WhereNode.make_atom
Только что определенный пользовательский поиск «старты», который имеет обратную логику «старты с»