Фильтрация модели Django по автополю

У меня есть модель Django, которая выглядит так -

class History(models.Model):
    testcaseidstring = models.AutoField(primary_key=True)  # Field name made lowercase.

Я храню строковые значения в этом поле в базе данных

Когда я делаю запрос по этому полю, например -

qs=qs.filter(testcaseidstring="tc123")

Я получаю ошибку "Field 'testcaseidstring' expected a number but got 'TC123'"

Как я могу фильтровать это автополе?

Является ли преобразование этого поля в TextField единственным выходом?

Любая помощь будет весьма признательна

Спасибо!!!

Из документации Django

AutoField - класс AutoField(**options)

Поле IntegerField, которое автоматически увеличивается в соответствии с доступными идентификаторов. Обычно вам не нужно использовать это поле напрямую; поле первичного ключа будет автоматически добавлено в вашу модель, если вы не укажете иначе. См. раздел Автоматические поля первичных ключей.

.

Итак, AutoField должно быть целым числом. Но вы не обязаны использовать автополе в качестве PrimaryKey. Например, вы можете использовать поле CharField в качестве Primary.

testcaseidstring = models.CharField(max_length=100, primary_key=True)

из документации,

Автополе¶ class AutoField(**options)¶ Целочисленное поле, которое автоматически увеличивается в соответствии с доступными идентификаторами. Обычно вам не нужно использовать его напрямую; поле первичного ключа будет автоматически добавлено в вашу модель, если вы не укажете иное. См. раздел Автоматические поля первичного ключа.

.

Использование строки для AutoField - плохая идея, если вы посмотрите на исходный код AutoField,

class AutoField(AutoFieldMixin, IntegerField, metaclass=AutoFieldMeta):

    def get_internal_type(self):
        return 'AutoField'

    def rel_db_type(self, connection):
        return IntegerField().db_type(connection=connection)

Он наследуется от IntegerField. Поэтому вы получаете Field 'testcaseidstring' expected a number but got 'TC123'.

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