【问题标题】:How to use Django join如何使用 Django 加入
【发布时间】:2016-03-12 02:35:39
【问题描述】:

您好,我正在 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 将返回给我使用来自 Call 和 SMS 的该用户的数据(基本上想使用 Join )。 之前我已经在mysql中应用了这个。

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

Server 是我的 mysql 数据库。

【问题讨论】:

标签: python mysql django django-views


【解决方案1】:

当您使用 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') 来提高效率。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2021-11-15
    • 1970-01-01
    • 2016-01-16
    相关资源
    最近更新 更多