Я разрабатываю веб-приложение, используя Django REST в качестве бэкэнда и Angular в качестве внешнего интерфейса.
У меня есть устаревшая база данных (только для чтения), в которой есть 3 таблицы, которые я хочу объединить для получения всех необходимых мне данных.
По сути, я использую результат этогозапрос на автоматическое заполнение формы.Пользователь вводит в форму известный номер счетчика и затем нажимает кнопку, которая вытягивает в форму другую связанную информацию, сводя к минимуму ввод данных.
Упрощенные таблицы и поля базы данных
MeterNumber
- bi_acct
- bi_srv_loc_nbr
- bi_mtr_nbr
Заказчик
- bi_acct (присоединиться к таблице MeterNumber)
- другие необходимые мне поля
ServiceLocation
- bi_srv_loc_nbr (присоединиться кТаблица MeterNumber)
- другие необходимые мне поля
Итак, как вы можете видеть, все эти таблицы могут объединяться в таблицу MeterNumber на основе полей bi_acct и bi_srv_loc_nbr.Я хочу иметь возможность сделать вызов REST на что-то вроде:
server/meter_number/123456
И тогда ответ JSON будет выглядеть примерно так:
{
"bi_acct": 111111,
"bi_srv_loc_nbr": 222222,
"bi_mtr_nbr": 123456,
"customer": [
{
"bi_acct": 111111,
"needed_field": "... "
}
],
"service_location": [
{
"bi_srv_loc_nbr": 222222,
"needed_field": "..."
}
]
}
И этот ответ будет использоваться для автоматического-заполните форму.
Но как мне создать эти объединения и получить данные в ответе JSON?Могу ли я сделать это с помощью сериализаторов?
Модели:
class MeterNumber(models.Model):
bi_acct = models.IntegerField(
db_column='BI_ACCT')
bi_srv_loc_nbr = models.IntegerField(
db_column='BI_SRV_LOC_NBR'
bi_mtr_nbr = models.IntegerField(
db_column='BI_MTR_NBR', blank=True, null=True)
class Meta:
app_label = 'cis'
db_table = 'MeterNumber'
managed = False
def __str__(self):
return str(self.bi_acct)
class Customer(models.Model):
bi_acct = models.IntegerField(
db_column='BI_ACCT')
other_fields = ...
class Meta:
app_label = 'cis'
db_table = 'Customer'
managed = False
def __str__(self):
return str(self.bi_acct)
class ServiceLocation(models.Model):
bi_srv_loc_nbr = models.IntegerField(
db_column='BI_SRV_LOC_NBR')
other_fields = ...
class Meta:
app_label = 'cis'
db_table = 'ServiceLocation'
managed = False
def __str__(self):
return str(self.bi_acct)
Проще говоря, учитывая номер счетчика, я хочу присоединить таблицы Customer и ServiceLocation к MeterNumber.Это очень простое соединение SQL.
Любое руководство приветствуется!