2015-12-07 24 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')查询。