我有个像这样的Django模型-
class History(models.Model):
testcaseidstring = models.AutoField(primary_key=True) # Field name made lowercase.我在数据库中存储此字段中的字符串值
当我对这个领域进行查询时-
qs=qs.filter(testcaseidstring="tc123")我说“字段'testcaseidstring‘期望一个数字但得到’TC123‘’时出错。”
如何在此AutoField上进行过滤?
将该字段转换为TextField是唯一的方法吗?
任何帮助都是非常有价值的。
谢谢!!
发布于 2022-01-10 09:04:08
来自文档,
自动场 类AutoField(**options)按可用ID自动递增的IntegerField。您通常不需要直接使用它;如果不指定,主键字段将自动添加到您的模型中。参见自动主键字段
。
将字符串用于AutoField是个坏主意,如果您查看AutoField类的源代码,
https://github.com/django/django/blob/main/django/db/models/fields/init.py#L2516
类AutoField(AutoFieldMixin,IntegerField,metaclass=AutoFieldMeta):def get_internal_type(self):返回'AutoField‘def rel_db_type(self,connection):返回IntegerField().db_type(connection=connection)
AutoField是从IntegerField继承的。这就是你得到的原因,
字段'testcaseidstring‘期望一个数字,但得到’TC123 123‘。
发布于 2022-01-10 09:01:39
来自Django的文档
AutoField -类AutoField(**选项) 根据可用ID自动递增的IntegerField。您通常不需要直接使用它;如果不指定,主键字段将自动添加到您的模型中。请参阅自动主键字段。
因此,AutoField必须是整数。但是您不必使用AutoField作为PrimaryKey。例如,您可以使用CharField作为主服务器。
testcaseidstring = models.CharField(max_length=100, primary_key=True)https://stackoverflow.com/questions/70649762
复制相似问题