【问题标题】:How to get the Ids from a django model如何从 django 模型中获取 ID
【发布时间】: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 django-views django-filter


【解决方案1】:

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

如果你不想这样,请使用

values_list('id', flat=True)

【讨论】:

  • 是的,谢谢 dhke。但它返回 [82L, 83L, 84L, 85L]。知道为什么吗?
  • @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 :)
猜你喜欢
  • 2015-12-22
  • 2014-04-03
  • 1970-01-01
  • 2022-01-09
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 1970-01-01
相关资源
最近更新 更多