【问题标题】:Django Multi join queryDjango 多连接查询
【发布时间】:2018-02-08 14:33:22
【问题描述】:

我是 django 新手,需要进行查询。我可以在 sql 中做,但我似乎无法在 django 中弄清楚。这是在 SQL 中。谁能告诉我如何在 django 中做到这一点。

select token from api_userprofile
join api_userdevice on api_userdevice.user_id=api_userprofile.user_id
join api_device on api_device.id=api_userdevice.device_id
where api_device.serial=3

我的模型如下所示:

class UserDevice(models.Model):
   user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT, null=False)
   device = models.ForeignKey(Device, on_delete=models.PROTECT, null=False)
   activation_date = models.DateTimeField(default=timezone.now, null=False)
   friendly_name = models.CharField(max_length=20, null=True, blank=True)
   is_owner = models.BooleanField(null=False, default=False)
   is_admin = models.BooleanField(null=False, default=True)

class Device(models.Model):
    serial = models.CharField(max_length=16, null=False, unique=True)
    publickey = models.CharField(max_length=44, null=False)

class UserProfile(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.PROTECT, null=False)
    token = models.TextField(null=False, blank=True)

【问题讨论】:

    标签: django python-3.x django-queryset


    【解决方案1】:

    如果我理解正确,你可以试试:

    users_pks = UserDevice.objects.filter(device__serial=3).values_list('user__pk')
    qs = UserProfile.objects.filter(user__pk__in=users_pks).values('token')
    

    查询sql查询,可以打印:

    print (qs.query)
    

    【讨论】:

    • 它给了我一个 AttributeError: 'QuerySet' object has no attribute 'values__list' 错误。我想做的是为共享设备__序列号的用户返回所有令牌
    • 抱歉错字!很高兴为您提供帮助)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 2023-03-12
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    相关资源
    最近更新 更多