Django Queryset на основе 2-3 связанных таблиц - PullRequest
0 голосов
/ 21 марта 2020


У меня есть 3 связанные таблицы в базе данных.

from django.db import models

# Create your models here.
class Country(models.Model):
    country_code = models.CharField('Country code', unique=True, max_length=3)
    country_name = models.CharField('Country Name', max_length=25, default="")

class Customers(models.Model):
    dnr = models.CharField('Customer Nr', max_length=8, unique=True)
    dname = models.CharField('Customer Name', max_length=50, default="")
    dcountry = models.ForeignKey(Country, on_delete=models.CASCADE)

class BigTable(models.Model):
    deb_nr_f = models.ForeignKey(Customes, on_delete=models.CASCADE, related_name='debitor_fnr')
    sales_2016 = models.IntegerField('Abs. 2016', default=0)
    sales_2017 = models.IntegerField('Abs. 2017', default=0)
    sales_2018 = models.IntegerField('Abs. 2018', default=0)
    sales_2019 = models.IntegerField('Abs. 2019', default=0)
    sales_2020 = models.IntegerField('Abs. 2020', default=0)
  1. Как мне создать набор запросов из двух таблиц: Cutomers и Bigtables в этой форме:
    Клиент № 1 /// Sales_2016 /// Sales_2017 /// ...
    Клиент № 2 /// Sales_2017 /// ...
    Клиент № ...

  2. Как создать набор запросов из трех таблиц: Страны, Cutomers и BigTable в этой форме:
    Страна № 1 /// Sales_2016 /// Sales_2017 /// .. .
    Страна № 2 /// Sales_2016 /// Sales_2017 /// ...
    Страна № ...

Спасибо

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Я предполагаю, что вы пытаетесь это сделать, используя модель клиента.

создать набор запросов из двух таблиц: Cutomers и Bigtables. Запрос

Customers.objects.values('dnr','dname','debitor_fnr__sales_2016','debitor_fnr__sales_2017'....)

Объяснение: Здесь Я использую поиск для доступа к значениям внешнего ключа. В модели BigTable вы сохранили deb_nr_f как поле внешнего ключа с related_name = 'debitor_fnr' для модели Customer. Таким образом, к записи можно получить доступ, используя связанное поле как childmodelrelatedname__childfieldname.

создать набор запросов из трех таблицы: Страны, Cutomers и BigTable Запрос

Customers.objects.values('dcountry__country_name','dnr','dname','debitor_fnr__sales_2016','debitor_fnr__sales_2017'....)

Пояснение Почти так же, как и выше, я обращаюсь к таблице стран с полем внешнего ключа в модели Customer в поле 'dcountry'. Так что это как parentmodelforeignkeyfield__parentfieldname

Для получения дополнительной информации вы можете обратиться к документации .

0 голосов
/ 21 марта 2020

Часы Документация

Django предлагает мощный и интуитивно понятный способ «отслеживать» отношения в поисках, автоматически заботясь о SQL СОЕДИНЕНИЯХ за вами сцены. Чтобы охватить отношение, используйте имя поля связанных полей в моделях, разделенных двойным подчеркиванием, пока не доберетесь до нужного поля.

  1. BigTable.objects.values('deb_nr_f__dname', 'sales_2016', 'sales_2017', ...)

  2. BigTable.objects.values('deb_nr_f__dcountry__country_name', 'sales_2016', 'sales_2017', ...)

если вам нужно совокупная сумма для каждого клиента, вы можете сделать это следующим образом

from django.db.models import Sum

BigTable.objects.values('deb_nr_f').order_by('deb_nr_f').annotate(2016_sum=Sum('sales_2016')).annotate(2017_sum=Sum('sales_2017'))...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...