Django 多连接操作
Django Multiple join operations
我有以下模型,其中的表通过多对一关系关联。
class Reading(models.Model):
reading = models.AutoField(primary_key=True)
client_connection = models.ForeignKey(ClientConnection, models.DO_NOTHING, db_column='client_connection', blank=True, null=True)
consumption = models.ForeignKey(Consumption, models.DO_NOTHING, db_column='consumption', blank=True, null=True)
date = models.DateField(blank=True, null=True)
class Client(models.Model):
client = models.AutoField(primary_key=True)
zone = models.ForeignKey('Zone', models.DO_NOTHING, db_column='zone', blank=True, null=True)
code = models.CharField(unique=True, max_length=255, blank=True, null=True)
order = models.IntegerField(blank=True, null=True)
full_name = models.CharField(max_length=255, blank=True, null=True)
class Zone(models.Model):
zone = models.AutoField(primary_key=True)
description = models.CharField(max_length=255, blank=True, null=True)
code = models.CharField(unique=True, max_length=255, blank=True, null=True)
使用 Django ORM 的 select_related() 我可以创建一个 QuerySet,它将遵循外键关系选择其他相关对象,如下所示。
def client_meters(request):
query = Reading.objects.filter(date__gte=datetime.date(2018,10,31)).select_related('client_connection__client__zone').all()
c_c = query.client_connection
但是,我收到错误
c_c = query.client_connection
AttributeError: 'QuerySet' object has no attribute 'client_connection'
我错过了什么。
那是因为您正在尝试访问 模型实例 上 模型查询集 的 client_connection
属性。
这样做:
for obj in query:
c_c = obj.client_connection
# do what you want
简单来说:您正在尝试访问元素列表的属性,而不是单个元素。
我有以下模型,其中的表通过多对一关系关联。
class Reading(models.Model):
reading = models.AutoField(primary_key=True)
client_connection = models.ForeignKey(ClientConnection, models.DO_NOTHING, db_column='client_connection', blank=True, null=True)
consumption = models.ForeignKey(Consumption, models.DO_NOTHING, db_column='consumption', blank=True, null=True)
date = models.DateField(blank=True, null=True)
class Client(models.Model):
client = models.AutoField(primary_key=True)
zone = models.ForeignKey('Zone', models.DO_NOTHING, db_column='zone', blank=True, null=True)
code = models.CharField(unique=True, max_length=255, blank=True, null=True)
order = models.IntegerField(blank=True, null=True)
full_name = models.CharField(max_length=255, blank=True, null=True)
class Zone(models.Model):
zone = models.AutoField(primary_key=True)
description = models.CharField(max_length=255, blank=True, null=True)
code = models.CharField(unique=True, max_length=255, blank=True, null=True)
使用 Django ORM 的 select_related() 我可以创建一个 QuerySet,它将遵循外键关系选择其他相关对象,如下所示。
def client_meters(request):
query = Reading.objects.filter(date__gte=datetime.date(2018,10,31)).select_related('client_connection__client__zone').all()
c_c = query.client_connection
但是,我收到错误
c_c = query.client_connection
AttributeError: 'QuerySet' object has no attribute 'client_connection'
我错过了什么。
那是因为您正在尝试访问 模型实例 上 模型查询集 的 client_connection
属性。
这样做:
for obj in query:
c_c = obj.client_connection
# do what you want
简单来说:您正在尝试访问元素列表的属性,而不是单个元素。