Форум сайта python.su
Привет ребята!
Запутался с проектированием моделей.
Подскажите пожалуйста.
Есть две модели “Транспорт” и “ТипТранспорта”.
Транспорт может быть: машина, лодка, танк, самолёт, поезд, вертолёт, звездолёт, космический корабль и т.д.
Тип транспорта может быть: сухопутный, морской, общий, воздушный.
class ТипТранспорта(models.Model): name = models.CharField() class Транспорт(models.Model): name = models.CharField()
class ТипТранспорта(models.Model): name = models.CharField() class Транспорт(models.Model): types = models.ManyToManyField(ТипТранспорта) name = models.CharField()
class ТипТранспорта(models.Model): transport = ForeignKey(Транспорт) name = models.CharField() class Транспорт(models.Model): name = models.CharField()
transport = Транспорт.objects.get(transport__name='сухопутный')
Офлайн
ИМХО правильней типы транспорта разделить на несколько структур, вроде такого
Тип_среда : сухопутный, морской, воздушный.
Тип_назначение : гражданский, военный
Тип_перевозка: люди, товары, комбинированный
Тип_привод: ручной, ДВС, атомный, ионный
и т.д. таким образом, чтобы транспорт можно было однозначно идентифицировать только одной сущностью из каждого типа.
Офлайн
FishHook, спасибо.
А если применить нормализацию таблиц:
class ТипТранспорта(models.Model): name = models.CharField() class Транспорт(models.Model): name = models.CharField() class Вид_и_Тип(models.Model): transport = models.ForeingKey(Транспорт) ttype = models.ForeingKey(ТипТранспорта)
Отредактировано MikaMika (Март 14, 2013 20:18:31)
Офлайн
MikaMikaУ Вас же несколько типов может быть, в Вид_и_Тип Вы же не запихаете больше одного типа.
В модели Вид_и_Тип мы однозначно указываем какому типу какой вид транспорта принадлежит.
Как такой вариант?
Офлайн
>В модели Вид_и_Тип мы однозначно указываем какому типу какой вид транспорта принадлежит.
Отношение многое ко многим автоматически создаёт таблицу связи с подобной структурой.
Офлайн
RodegastЯ знаю.
>В модели Вид_и_Тип мы однозначно указываем какому типу какой вид транспорта принадлежит.Отношение многое ко многим автоматически создаёт таблицу связи с подобной структурой.
Отредактировано FishHook (Март 15, 2013 16:33:13)
Офлайн
FishHookПочему нет?
У Вас же несколько типов может быть, в Вид_и_Тип Вы же не запихаете больше одного типа.
Отредактировано MikaMika (Март 15, 2013 16:54:38)
Офлайн
> автор уже не хочет ManyToMany и правильно делает.
Судя по третьему посту автор решил сделать собственную реализацию ManyToMany
> Тип транспорта может быть: сухопутный, морской, общий, воздушный.
Должны существовать классификаторы видов транспорных средств кторорые позволяют однозначно охарактеризовать конкретный транспорт. Их используй и тогда ManyToMany не понадобиться.
Офлайн
Rodegast, в некоторых случаях использовать классификаторы бывает тяжело.
Например гороскоп.
Знак зодиака крыса может относится к японскому и китайскому гороскопу, а у этих гороскопов может быть сколько угодно знаков зодиака.
Связь ManyToMany.
Есть модель с типами гороскопов:
class HType(models.Model): name = models.CharField()
# зодиакальный class HType_Other(models.Model): name = models.CharField() # китайский # японский class HType_Asian(models.Model): name = models.CharField()
Отредактировано MikaMika (Март 16, 2013 07:04:24)
Офлайн
Если тебе на гороскопах понятней, то на них и объясняю:
Создаёшь 2 модели:
1) Astrolog (китайский, японский, вуду, ….)
2) Znak (Козерог, Крыса, Собака, Таракан, ….)
Вторую модель связываешь по внешнему ключу с первой и всё. Если у тебя крыса может быть японской и китайской, то во второй модели будут 2 записи одна для японцев другая для китайцев.
Офлайн