Запутался с проектированием моделей.
Подскажите пожалуйста.
Есть две модели “Транспорт” и “ТипТранспорта”.
Транспорт может быть: машина, лодка, танк, самолёт, поезд, вертолёт, звездолёт, космический корабль и т.д.
Тип транспорта может быть: сухопутный, морской, общий, воздушный.
class ТипТранспорта(models.Model): name = models.CharField() class Транспорт(models.Model): name = models.CharField()
Так как некоторые виды транспорта (модель - Транспорт) могут иметь несколько типов (модель - ТипТранспорта), то как лучше сделать взаимосвязи между моделями?
Вариант 1:
class ТипТранспорта(models.Model): name = models.CharField() class Транспорт(models.Model): types = models.ManyToManyField(ТипТранспорта) name = models.CharField()
Транспорт может иметь несколько типов и у одного типа может быть несколько видов транспорта.
или
Вариант 2:
class ТипТранспорта(models.Model): transport = ForeignKey(Транспорт) name = models.CharField() class Транспорт(models.Model): name = models.CharField()
В этом случае если тип транспорта принадлежит нескольким видам транспорта, то придётся вставлять две записи с одинаковым типом которые ссылаются на разный вид транспорта из модели “Транспорт”.
Я плохо понимаю когда лучше использовать ForeingKey, а когда ManyToMany связи.
Первый вариант хороший и как мне кажется правильный, но при выборке из модели Транспорт:
transport = Транспорт.objects.get(transport__name='сухопутный')
А так мне приходится дополнительно фильтровать transport.types в шаблонах.