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

时间:2017-07-27 07:59:35

标签: django django-models django-views

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

3 个答案:

答案 0 :(得分:0)

您尝试匹配&#39; 00LD&#39; id的字段Ident 或者在你的第一个例子中你写道:
indentity.objects.filter(ident='00LD').values('name')
&#39; 00LD&#39;与ident

Ident字段匹配

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

的字段

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

首先 ident 表示 IdentificationAddress 模型中的字段 ident identC中的 id_ident 字段模型