【问题标题】:ValueError: invalid literal for int() with base 10 Foreign Key DjangoValueError:具有基数 10 外键的 int() 的无效文字 Django
【发布时间】:2017-07-27 07:59:35
【问题描述】:

我正在学习 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'

如果我在 postgres 中尝试这个

SELECT * FROM identification_address WHERE ident= '00LD'

我没有任何问题。

感谢您的帮助。

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

【问题讨论】:

  • 我试过了:
    ident_Address.objects.filter(ident__name='Joss').values()
    显示这个错误
    ProgrammingError: operator does not exist: text = integer LINE 1: ...n_c" ON ("identification_address"."ident" = "ident... ^
    提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。

标签: django django-models django-views


【解决方案1】:

您尝试将“00LD”与idIdent 字段匹配。
或者在您的第一个示例中,您写道:
indentity.objects.filter(ident='00LD').values('name')
'00LD' 与 Identident 字段匹配

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

如果您想按 Ident 名称过滤 ident_Address: ident_Address.objects.filter(ident__name='Joss').values()

【讨论】:

  • 嗨,威尔弗里德。
    我已经尝试了第一个选项 ident_Address.objects.filter(ident__ident='00LD').values() FieldError: Cannot resolve keyword 'ident' into field。选项有:id_ident_address、address、ident、ident_id、time。 我已经尝试为 Ident 更改 ident 相同的错误。第二条指令产生同样的错误。
【解决方案2】:

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

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

【讨论】:

  • 嗨,哈桑。我试过你的建议,但我失败了。 FieldError:无法将关键字“ident”解析为字段。选项有:id_ident_address、address、ident、ident_id、时间
  • 您必须在IdentC 表中提供所需对象的ID。我只是写下您在问题中提供的 ID。您应该在这里给出整数作为 ID。
  • 嗨。如果我没有查找,它对我不起作用......这就是为什么我必须把 iexact
【解决方案3】:

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

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

第一个ident表示IdentificationAddress模型中的ident字段和identC中的id_ident字段em> 型号

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-04
    • 2023-03-09
    • 2011-07-17
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2017-12-06
    相关资源
    最近更新 更多