2015-12-07 52 views
2

您好我正在Django中製作後端服務器,用於存儲來自應用程序的用戶數據。 以下是我的模特兒。如何使用Django加入

class Subscriber(models.Model): 
    subId = models.IntegerField(max_length=20,unique=True,blank=False) 
    Name = models.CharField(max_length=25,blank=True) 

class SMS(models.Model): 
    subscriberId = models.ForeignKey(Subscriber, null=False) 
    epochTime = models.IntegerField(null = False) 
    time = models.CharField(max_length= 250 ,blank = False) 

class Call(models.Model): 
    subscriberId = models.ForeignKey(Subscriber, null=True) 
    epochTime = models.IntegerField(null = False) 
    time = models.CharField(max_length= 50 ,blank = False) 
    Date = models.CharField(max_length= 50 ,blank = False) 

我需要寫一個Django查詢,我會給subscriberId和Django會回到我使用的數據來自呼叫和SMS(基本上要用加入)該用戶。 早些時候我已經在mysql中應用了這個。

select * from Server_Text JOIN (Server_Call) ON (Server_SMS.subscriberId_id = 11 and Server_Call.subscriberId_id = 11) ; 

其中Server是我的mysql數據庫。

+0

https://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward 這是你已經看過的東西嗎? – Kendas

+0

是的,但我沒有得到解決這個問題的完美解決方案。 :-( –

回答

0

當您使用Django時,您不應該考慮連接和sql查詢;重點是模型層將這些內容抽象出來。你只是想獲得用戶,然後按照關係得到短信和電話信息:

subscriber = Subscriber.objects.get(subId=my_subscriber_id) 
print subscriber.sms_set.all() # all SMSs for that subscriber 
print subscriber.call_set.all() # all Calls for that subscriber 

如果你這樣做了很多,你可以把它多一點效率在最初使用prefetch_related('sms', 'call')查詢。