Разделение объявления модели между несколькими приложениями в Django
Я работаю и создаю свой сайт на Django и столкнулся с этой логической проблемой.
Мой проект состоит из нескольких приложений.
Я хочу объявить в каждой из них "кусочек" большей модели, которая будет представлена в одной единственной таблице. Пример:
- model Person
- model DetailsPerson
Поскольку каждое отдельное приложение определяет конкретную часть человека, моя идея заключалась в децентрализации объявления модели DetailsPerson таким образом, чтобы они фигурировали в одной таблице, но каждое приложение увеличивало поля, необходимые приложению для работы.
Возможно ли это?
Вы можете использовать наследование классов, например
class Person(models.Model):
(fields)
# in other file, import this class an inherit
class DetailsPerson(Person):
(add. fields)
Другой вариант - использовать отношения one-to-one
.
class Person(models.Model):
(fields)
# in other file, import this class and do
class DetailsPerson(models.Model):
person = models.OneToOneField(Person, on_delete=models.CASCADE)
(additional fields)
В случае добавления деталей в класс Person, я бы предпочел второй вариант.
А если вы хотите иметь несколько различных классов Detail для одного Person, используйте ForeignKey:
class DetailsPerson1(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
(additional fields)
class DetailsPerson2(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
(additional fields)