Django Несколько операций объединения - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть следующая модель с таблицами, связанными через отношения «многие-к-одному».

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'

Чего мне не хватает?

1 Ответ

0 голосов
/ 19 декабря 2018

Это потому, что вы пытаетесь получить доступ к атрибуту client_connection экземпляра модели на наборе запросов модели .

Это будет сделано:

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

Проще говоря: вы пытаетесь получить доступ к атрибуту списка элементов вместо одного элемента.

...