首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过滤AutoField上的Django模型

过滤AutoField上的Django模型
EN

Stack Overflow用户
提问于 2022-01-10 08:43:09
回答 2查看 282关注 0票数 0

我有个像这样的Django模型-

代码语言:javascript
复制
class History(models.Model):
    testcaseidstring = models.AutoField(primary_key=True)  # Field name made lowercase.

我在数据库中存储此字段中的字符串值

当我对这个领域进行查询时-

代码语言:javascript
复制
qs=qs.filter(testcaseidstring="tc123")

我说“字段'testcaseidstring‘期望一个数字但得到’TC123‘’时出错。”

如何在此AutoField上进行过滤?

将该字段转换为TextField是唯一的方法吗?

任何帮助都是非常有价值的。

谢谢!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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‘。

票数 1
EN

Stack Overflow用户

发布于 2022-01-10 09:01:39

来自Django的文档

AutoField -类AutoField(**选项) 根据可用ID自动递增的IntegerField。您通常不需要直接使用它;如果不指定,主键字段将自动添加到您的模型中。请参阅自动主键字段。

因此,AutoField必须是整数。但是您不必使用AutoField作为PrimaryKey。例如,您可以使用CharField作为主服务器。

代码语言:javascript
复制
testcaseidstring = models.CharField(max_length=100, primary_key=True)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70649762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档