如何从 django 模型中获取 ID

Posted

技术标签:

【中文标题】如何从 django 模型中获取 ID【英文标题】:How to get the Ids from a django model 【发布时间】:2016-01-02 23:41:40 【问题描述】:

您好,我有两个名为 A 和 B 的模型。我想从模型 B 中获取 id,并将其与模型 A 中的 id(外键关系)进行比较。我使用以下方法获取ID a = B.objects.filter(b_id=object.id).values_list('id')

但是打印的结果是 [(82L,), (83L,), (84L,), (85L,)] 而不是 [82, 83 ,] 等。 如果没有附加的Ls,如何获得平面列表?

【问题讨论】:

Python/Django: Creating a simpler list from values_list()的可能重复 【参考方案1】:

values_list() 默认返回分组为元组的值。

如果你不想这样,请使用

values_list('id', flat=True)

【讨论】:

是的,谢谢 dhke。但它返回 [82L, 83L, 84L, 85L]。知道为什么吗? @温柔:***.com/questions/11764713/… @gentle 很难说不知道你的模型和你的数据库。 L 表示这是一个长整型文字。你在使用 mysql 吗? MySQL 的 dbapi 实现似乎是return long integers for all integer types。它应该没有什么区别(除了可能有点性能方面)。 “L”后缀表示“长整数”,仅作为int 对象的内部表示打印。你不必关心它。【参考方案2】:

这些数字是长整数。因此,它们以L 后缀返回。不过,数字后面确实没有字母“L”。这已在 Python 3 中删除,因为所有整数现在都被视为长整数。我不相信您所看到的会引起恐慌。

编辑:请参阅why-do-integers-in-database-row-tuple-have-an-l-suffix 了解更多信息。

【讨论】:

嗨 mfcovington,谢谢,但我使用的是 python 2.7。这就是为什么担心 @gentle 是的,我想你一定在使用 python 2,因为你正在看到它。它实际上是在引起问题还是只是在困扰您?如果您出于某种原因想要显示它并且没有包含L,您可以使用str(),它应该只返回数字。 因为稍后我需要将这些 id 与其他模型的真实 int id 进行比较。这就是为什么会担心 @gentle:但它们是实整数,“长”整数可以比“普通”整数大。您可以将它们相互比较。见:docs.python.org/2/library/… 哦,我明白了。非常感谢 mfcovington :)

以上是关于如何从 django 模型中获取 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何从用户在 django 基本模板中创建的所有帖子中获取模型字段值的总和?

如何获取 Django 模型来自的应用程序?

如何从模型中获取一个项目并使用表单 django 将相同的项目保存在另一个模型中

如何使用 django rest 框架在模板中获取模型选择字段名称而不是 id

如何从 django 的模型中获取一个字段

django模型:获取id列表