2017-09-06 3 views
0

나는 Django를 처음 사용하여 두 모델의 데이터가 필요하며 하나의 쿼리로이 작업을 수행하려고합니다. 여기에 내가 무엇을 필요로하는 SQL을 가지고 있습니다. 누군가 나를 장고에서 어떻게하는지 보여 주실 수 있습니까? 어떤 도움을 크게 감상 할 수Django 2 개 모델의 데이터 가져 오기

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) 
    is_alerts_enabled = models.BooleanField(null=False, default=True) 

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

:

select api_userprofile.last_name, api_userprofile.first_name, 
    api_userdevice.is_admin, 
    api_userdevice.is_alerts_enabled,api_userdevice.is_owner from 
    api_userprofile 
    join api_userdevice on api_userdevice.user_id=api_userprofile.user_id 
    where api_userdevice.user_id=10 and api_userdevice.device_id=29 

제 2 개 모델입니다.

+0

은 내가 내 위의 SQL 쿼리에 무슨 짓을했는지 장고에하고 싶은이. userprofile에서 이름과 성을, userdevice에서 is_admin, is_owner 및 is_alerts_enabled가 필요합니다. –

+0

다음과 같은 방법을 시도해 볼 수 있습니다. https://chriskief.com/2015/01/12/combine-2-django-querysets-from-different-models/ – jape

답변

1

그렇게 쉬운 방법이있다 :

User.objects.filter(userdevice__id=29, id=10).values('userdevice__is_owner', 'userdevice__is_admin', 'userdevice__is_alerts_enabled', 'userprofile__first_name', 'userprofile__last_name') 
+0

감사합니다. 또한 기기 ID별로 필터링해야합니다. –

+0

@robertwoods 그래서 필터 조건에 추가하십시오. 대답은 –

+0

으로 업데이트되었습니다. 알고 있다면 여기에 묻지 않을 것입니다. –

관련 문제