【问题标题】:Django Multiple join operationsDjango 多连接操作
【发布时间】:2019-05-20 04:39:58
【问题描述】:

我有以下模型,其中表通过多对一关系关联。

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() 我可以创建一个查询集,它将遵循外键关系选择其他相关对象,如下所示。

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'

我错过了什么。

【问题讨论】:

  • 这和join没有任何关系。

标签: django django-orm


【解决方案1】:

那是因为您试图访问 model querysetmodel instanceclient_connection 属性。

这样就可以了:

for obj in query:
    c_c = obj.client_connection
    # do what you want

简单来说:您正在尝试访问元素列表的属性而不是单个元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-28
    • 2016-08-17
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多