Django - Использование Cast для запроса, являются ли значения CharField gte, когда не все значения являются строковыми представлениями ints

У меня есть модель DataField в django, которую я использую для хранения значений для различных типов полей. Она выглядит следующим образом:

class DataField(models.Model):
    class FieldTypes(models.TextChoices):
        TEXT = 'Text', 'Text'
        QUANTITATIVE = 'Quantitative', 'Quantitative'
        SELECTION = 'Selection', 'Selection'

    name = models.CharField(max_length=50)
    field_type = models.CharField(max_length=150, choices=FieldTypes.choices)
    value = models.CharField(max_length=150)

Я хочу иметь возможность сделать мультизапрос, возвращающий определенные типы DataField с определенными значениями, которые больше заданного числа, например:

DataField.objects.filter((Q("value__gte"= 1000) & Q(name= 'credit'))| (Q("value"= "Smith") & Q(name='Last Name')))

Проблема в том, что поле значений является CharField, поэтому я не могу делать gte-фильтры. Поле должно быть CharField, потому что я также храню другие значения строк слов, например, имена.

Я попытался использовать Cast для создания поля value_int для запроса, но поскольку не все значения для DataField.value могут быть преобразованы в int, я получаю синтаксическую ошибку:

queryset = DataField.objects.annotate(
    value_int=Cast('value', output_field=IntegerField()),).all()

django.db.utils.DataError: invalid input syntax for type integer: "Smith"

Есть ли способ добавить некоторую логику в Cast, чтобы если значение не является действительным целым числом, оно просто переходило в null?

Для числового типа значения необходимо использовать соответствующее числовое поле для сравнения,

Не рекомендуется использовать числовое поле вместе с полем char и фильтровать его, поскольку предполагается, что поле является числовым

Поскольку, предположим, у вас '2' сохранено как символьное поле, но на самом деле оно числовое, то сравнение, предположим, '2' > '10' даст строковое сравнение, а не числовое

Поэтому рекомендуется сохранить имя в другом поле, а числовое значение в другом

Вернуться на верх