我正在学习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
答案 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 字段模型