Я создаю проект, который требует комментариев в нескольких приложениях, например blog
, wikis
и pages
. У меня есть приложение commons
, которое содержит все распространенные модели. Как получить модель Comment
, общую для всех приложений?
commons / models.py
class Comment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='comments')
body = models.TextField()
parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True)
blog / models.py
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='posts')
content = models.TextField()
wikis / models.py
class Wiki(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='wikis')
content = models.TextField()
Из того, что я исследовал, у меня есть следующие варианты:
- Три
Comment
моделируют три приложения. - Одна
Comment
модель в commons
приложении с отношениями ForeignKey к другим приложениям (что, как я полагаю, вызовет проблемы с циклическим импортом) и в итоге получается таблица комментариев с несколько столбцов, например blog_id
, wiki_id
и page_id
. - Используйте отношения Django
GenericForeignKey
.
Я не хочу делать 3 Но из 1 и 2 я хотел бы знать, какой наиболее эффективный способ справиться с этим без повторения кодов и добавления ненужных соединений с базой данных.
Или есть способ лучше?