У меня 3 модели:
class Country(models.Model):
country_id = models.AutoField(primary_key=True)
country_name = models.CharField(max_length=50)
population = models.BigIntegerField()
class State(models.Model):
state_id = models.AutoField(primary_key=True)
state_name = models.CharField(max_length=50)
country = models.ForeignKey(Country, on_delete=models.CASCADE)
population = models.BigIntegerField()
class District(models.Model):
state_id = models.AutoField(primary_key=True)
district_name = models.CharField(max_length=50)
state = models.ForeignKey(State, on_delete=models.CASCADE)
population = models.BigIntegerField()
Теперь, учитывая country_id
, я хочу получить все связанные State
и District
в следующем формате:
{
'country':{
'country_id': 1,
'coutry_population': 120000,
'state':[
{
'state_id': 10,
'state_name': 'A',
'state_population': 10000,
'district':[
{
'district_id': 100,
'district_name': 'District1',
'district_population': 4000
},
{
'district_id': 101,
'district_name': 'District2',
'district_population': 6000
}]
},
{
<2nd state data here>
}
]
}
}
Также я должен иметь возможность выбирать определенные столбцы из каждой модели.
Например: только state_name
из State
модели, district_name
и district_population
из District
модели, et c
Мне тоже нужна функция фильтрации, на разных моделях.
Например: Получите только районы, соответствующие условию District.population> 5000
Ни один из вопросов, которые я мог здесь найти, не помог решить проблему. Ближайший из них выглядел так: Django: наиболее эффективный способ создания вложенного словаря из запросов связанных моделей?
Но здесь связь находится в противоположном направлении.
Одно из решений, которое я мог придумать, заключалось в том, чтобы запросить каждую из моделей по-разному и сохранить их в словаре, а затем объединить. Но если бы я мог получить более прямой подход, это было бы полезно.