【问题标题】:Django join query set based on conditionDjango join 查询集基于条件
【发布时间】:2019-04-21 04:35:33
【问题描述】:

型号如下:

class Workspace(models.Model):
    wid = models.AutoField(primary_key=True, validators=[MinValueValidator(1000)])
    wname = models.CharField(max_length=100)
    created_time = models.DateTimeField(auto_now_add=True)


class Invitation(models.Model):
    iid = models.AutoField(primary_key=True, validators=[MinValueValidator(1000)])
    invite_to = models.ForeignKey(User, related_name="invitation_uid2", on_delete=models.CASCADE)
    workspace = models.ForeignKey(Workspace, related_name="invitation_wid", on_delete=models.CASCADE)
    created_time = models.DateTimeField(auto_now_add=True)

我需要根据invite_to获取工作区列表

"select * from Workspace where wid in (select workspace from Invitation whereinvite_to = 1)"

上面的查询是ORM类型

【问题讨论】:

  • 如果可以通过Django的QuerySet做这个查询,为什么还要做一个SQLite联合查询集呢?
  • Django 也不错@AuroraWang
  • 你不能做类似的事情:“Workspace.objects.filter(invitation_wid__invite_to__id=1)”吗?

标签: python django django-models orm django-queryset


【解决方案1】:

正如我在 cmets 中所说,您可以使用 Django's QuerySet

Workspace.objects.filter(invitation_wid__invite_to__id=1)

【讨论】:

    【解决方案2】:

    如果您有用户 ID,则可以使用双下划线 __ 语法来过滤关系:

    workspaces = Workspace.objects.filter(invitation_wid__invite_to__id=1)
    

    【讨论】:

      猜你喜欢
      • 2013-12-31
      • 2015-07-30
      • 1970-01-01
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多