@WebDev921

Как получить поле по которому был найдет объект django?

Например есть модель:
class TestModel(models.Model):

    title = models.CharField()
    desc = models.CharField()
    other_field = models.CharField()


И я пытаюсь найти объект:
result = TestModel.objects.filter(Q(title__icontains='test') | Q(desc__icontains='test') | Q(other_field__icontains='test') )


Возможно ли узнать поле по которому был найдет этот объект?
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
fox_12
@fox_12 Куратор тега Django
Расставляю биты, управляю заряженными частицами
Немного непонятна конечная цель. Если просто глянуть на значение поля объекта - по какой-то причине нельзя - то можно в аннотированные поля добавить желаемое:

.annotate(
    title_contains=Case(
        When(
           Q(title__icontains='test'),
           then=V('True')
        ),
       default=(V(False)),
       output_field=BooleanField()
    ),
    desc_contains=Case(
        When(
           Q(desc__icontains='test'),
           then=V('True')
        ),
       default=(V(False)),
       output_field=BooleanField()
    ),
...


и в результате в полях title_contains, desc_contains, ...
будет прилетать булевое значение - в каком соответствующем поле было найдено нужное соответствие

for obj in result:
   print(obj.title_contains) # триггернулось ли по title
   print(obj.desc_contains) # триггернулось ли по desc
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы