ValueError:int() 的文字无效,具有 base 10 外键 Django



我正在学习Django。 我有两个模型如下:

class IdentificationAddress(models.Model):
id_ident_address = models.AutoField(primary_key=True)
ident = models.ForeignKey('Ident', models.DO_NOTHING, db_column='ident')
address = models.TextField()
time = models.DateTimeField()
class Meta:
managed = False
db_table = 'identification_address'

class IdentC(models.Model):
id_ident = models.AutoField(primary_key=True)
ident = models.TextField(unique=True)
name = models.TextField()
class Meta:
managed = False
db_table = 'ident'

我正在使用 Django 调试器:

python manage.py shell

并导入模型

from invent.models import IdentC as identity
from invent.models import IdentificationAddress as ident_Address

我可以访问特定标识的名称

indentity.objects.filter(ident='00LD').values('name')

它返回

<QuerySet [{'name': u'Joss'}]>

然后,我可以访问特定地址的信息:

ident_Address.objects.filter(address='LOC23').values().last()

它返回

{'times': u'{"2017-07-16"}', u'ident_id': u'00LD', 'address': u'LOC23', 'id_ident_address': 217}

但是当我尝试使用任何标识时出现错误

ident_Address.objects.filter(ident='00LD').values()

ident_Address.objects.filter(ident_id='00LD').values()

错误:

ValueError: invalid literal for int() with base 10: '00LD'

如果我在邮政中尝试这个

SELECT * FROM identification_address WHERE ident= '00LD'

我没有任何问题。

我感谢任何帮助。

提前谢谢你注意:为了清楚起见,我已将 Ident 模型的名称更改为 IdentC

您尝试将"00LD"与Ident的字段id匹配。
或者在你的第一个例子中,你写了:
indentity.objects.filter(ident='00LD').values('name')'00LD
'与identIdent字段匹配

所以你可以像这样过滤:
ident_Address.objects.filter(ident__ident='00LD').values()
第一个标识表示你的模型,第二个标识表示Ident字段。

如果要按标识名称过滤ident_Address:ident_Address.objects.filter(ident__name='Joss').values()

在 Django 中,当你想访问 ForeignKey 表中的某个字段时,你应该使用__(双下划线(。对于您的情况,它将是

ident_Address.objects.filter(ident__id_ident='00LD')

谢谢大家。 抱歉@Exprator我也在学习如何使用答案字段。 所以我开始调试如何将 Django 查询转换为 SQL 查询。然后我找到了解决方案:

ident_Address.objects.filter(ident__id_ident__iexact='00LD').values()

其中第一个标识表示标识地址模型中的字段标识identC模型中的id_ident字段

相关内容

最新更新