【问题标题】:How would I perform this query in Django?我将如何在 Django 中执行此查询?
【发布时间】:2011-04-06 08:00:47
【问题描述】:
class ExternalUser(models.Model):
    user = models.ForeignKey(User)
    external_account_id = models.CharField(max_length=200, null=True, blank=True)

class ExternalFriends(models.Model):
    external_user = models.ForeignKey(ExternalUser)
    external_account_id = models.CharField(max_length=200, null=True, blank=True)

假设我首先得到所有 ExternalFriends:

all_friends = ExternalFriends.objects.all()

好的,现在我有一个查询集。

我如何SELECT * FROM ExternalUser WHERE external_account_id IN [ ...all_friends's external_account_ids... ]

Django 的等价物是什么?

【问题讨论】:

  • 你真的需要两个模型上的“external_account_id”字段吗?由于您的 ExternalFriends 已经与 ExternalUser 相关,因此将 id 存储在 ExternalUser 模型上就足够了。这也将简化您的查询。
  • 也许:ExternalUser.objects.filter(external_friends__external_account_id__is_null=False)

标签: python mysql database django


【解决方案1】:

当然可以更有效地完成,但是...

ExternalUser.objects.filter(external_account_id__in=[friend.id for friend in all_friends])

【讨论】:

  • 希望其他人能回答这个问题!我想只得到 ids all_friends = ExternalFriends.objects.all().values('id') 然后用friend['id']替换frield.id
  • +1 IN 子句通常效率不高,但在这种情况下您的查询是正确的。我们如何获得“all_friends”是避免 IN 的问题,并尽可能加入。
猜你喜欢
  • 2018-12-05
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 2020-05-09
  • 2021-01-29
  • 2021-10-15
  • 1970-01-01
  • 2021-07-04
相关资源
最近更新 更多