Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как связать два объекта по ID

UltraLink Знаток (252), на голосовании 3 года назад
Направьте в нужном направление. Пишу диплом на Django+python. Не знаю как правильно сделать привязку к id, чтобы при выборе области, выходили города, которые входят в область. Например: Иркутская область - Все города этой области. Сейчас у меня просто работает вывод в шаблон. Логики привязки региона к городу у меня нету. В моделях она есть, но как её реализовать?
# Модель города
class City(models.Model):
city_name = models.CharField('название города', max_length=50)

def __str__(self):
return self.city_name

class Meta:
verbose_name = "Город"
verbose_name_plural = "Города"

# Модель региона
class Region(models.Model):
region_name = models.CharField('название региона', max_length=150)

def __str__(self):
return self.region_name

class Meta:
verbose_name = "Регион"
verbose_name_plural = "Регионы"

# Модель связи города и региона в одну таблицу "География"
class Geography(models.Model):
Region = models.ForeignKey('Region', on_delete=models.CASCADE)
City = models.ForeignKey('City', on_delete=models.CASCADE)

def __str__(self):
return self.Region.region_name

class Meta:
verbose_name = "География"
verbose_name_plural = "Географии"

Достаю все объекты из модели такой командой:
geography_city_and_region = Geography.objects.all()
Голосование за лучший ответ
port port Искусственный Интеллект (181514) 3 года назад
Так словари-то на кой ляд в Пайтоне существуют? Лепи словарь, в котором область является ключом, к которому прицеплены все ее города... Это будет работать быстрее всего. Можно изгаляться словарем, в котором ключом является пара "область-город", а потом делать выборку по вхождению области или города. Можно и к городам прицепить их области, единственное, что города бывают с одинаковыми названиями в разных областях, поэтому придется это учесть. Да еще несколько вариантов можно предложить, если начать думать не посреди ночи...
Похожие вопросы