Django多连接查询

Django多连接查询,django,python-3.x,django-queryset,Django,Python 3.x,Django Queryset,我是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.s

我是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)

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

users_pks = UserDevice.objects.filter(device__serial=3).values_list('user__pk')
qs = UserProfile.objects.filter(user__pk__in=users_pks).values('token')
对于check sql查询,您可以打印:

print (qs.query)

它给了我一个AttributeError:'QuerySet'对象没有属性'values\uu list'错误。我要做的就是为共享一个设备序列号的用户返回所有的令牌。对不起,输入错误!(很高兴帮助你)