2015-12-07 2 views
2

Привет Я делаю сервер backend в Django для хранения пользовательских данных из приложения. Ниже приведены мои модели.Как использовать Django join

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 (в основном хочет использовать Join). ранее я применил это в 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/ru/dev/topics/db/queries/#following-relationships-backward Вы уже это заметили? – Kendas

+0

да, но я не получаю идеального решения этой проблемы. :-( –

ответ

0

Вы не должны думать в терминах объединений и sql-запросов при использовании Django; Дело в том, что модельный слой абстрагирует их. Вы просто хотите получить Абонент, а затем следовать отношениям, чтобы получить SMS и вызов информацию:

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') в начальном запрос.

Смежные вопросы