Django общая модель комментариев для использования в разных приложениях - PullRequest
0 голосов
/ 18 июня 2020

Я создаю проект, который требует комментариев в нескольких приложениях, например 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()

Из того, что я исследовал, у меня есть следующие варианты:

  1. Три Comment моделируют три приложения.
  2. Одна Comment модель в commons приложении с отношениями ForeignKey к другим приложениям (что, как я полагаю, вызовет проблемы с циклическим импортом) и в итоге получается таблица комментариев с несколько столбцов, например blog_id, wiki_id и page_id.
  3. Используйте отношения Django GenericForeignKey.

Я не хочу делать 3 Но из 1 и 2 я хотел бы знать, какой наиболее эффективный способ справиться с этим без повторения кодов и добавления ненужных соединений с базой данных.

Или есть способ лучше?

...