2017-08-30 5 views
1

Je suis nouveau sur django et j'ai besoin de faire une requête. Je peux faire en sql mais je n'arrive pas à le comprendre en django. Ici, c'est en SQL. Quelqu'un peut-il me dire comment le faire en django.Django Multi rejoindre la requête

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 

Mes modèles ressemblent à ceci:

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) 

Répondre

1

si je comprends bien, vous pouvez essayer:

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

pour vérifier requête SQL, vous pouvez imprimer:

print (qs.query) 
+0

Il me donne une AttributeError: l'objet 'QuerySet' n'a pas Attribue l'erreur 'values__list'. Est ce que je suis en train de faire est de retourner tous les jetons pour les utilisateurs qui partagent un numéro de périphérique de l'appareil –

+0

peu importe que je l'ai compris. values__list doit être value_list. Je vous remercie!!! –

+0

désolé pour faute de frappe! content de vous aider) –