Django: выбор значений из связанной таблицы
У меня есть две простые таблицы:
# Table manufacturers in my db:
# | id | name |
# |----|-------|
# | 1 | Tesla |
# | 2 | BMW |
# Table cars in my db:
# | id | model | make |
# |----|---------|-------|
# | 1 | Model 3 | Tesla |
# | 2 | M5 | BMW |
# | 3 | Model S | Tesla |
Вот мои models.py:
from django.db import models
class ManufacturerModel(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=255, unique=True)
class Meta:
managed = False
db_table = 'manufacturers'
class CarModel(models.Model):
id = models.IntegerField(primary_key=True)
model = models.CharField(max_length=255)
make = models.ForeignKey(
ManufacturerModel,
on_delete=models.DO_NOTHING,
null=False,
to_field='name',
db_column='make'
)
class Meta:
managed = False
db_table = 'cars'
Мне нужно получить этот объект:
manufacturers = {
'Tesla': ['Model 3', 'Model S'],
'BMW': ['M5']
}
Или хотя бы этот:
manufacturers_1 = [
{
'id': 1,
'name': 'Tesla',
'cars': [
{
'id': 1,
'model': 'Model 3',
'make': 'Tesla'
},
{
'id': 3,
'model': 'Model S',
'make': 'Tesla'
}
]
},
{
'id': 2,
'name': 'BMW',
'cars': [
{
'id': 2,
'model': 'M5',
'make': 'BMW'
}
]
}
]
По сути это просто очень простой запрос, и я могу легко получить все, что хочу, не создавая много кода, описывающего модели и делающего другие django вещи:
from django.db import connection
import pandas as pd
query = """
select c.model, c.make
from cars c
left join manufacturers m
on m.name = c.make
"""
manufacturers = pd.read_sql_query(query, connection)
# ...
Но это кажется немного жестко закодированным, поэтому я пытаюсь узнать, как использовать модели Django и в чем преимущества их использования. Я потратил много времени на prefetch_related и select_related и не получил ничего полезного. Пожалуйста, помогите мне получить этот объект, используя модели Django. Заранее спасибо!