Фильтрация модели 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'
.