Я только что закончил работу с учебниками Django во второй раз, и теперь я понимаю вещи намного яснее. Тем не менее, я все еще не понимаю, как приложения внутри сайта взаимодействуют друг с другом.
Например, скажем, я пишу приложение для блога (довольно популярная деятельность, видимо). Сообщения в блогах и комментарии, как правило, идут вместе, и все же они достаточно отчетливы, что их нужно встроить в отдельные приложения, а также общую философию развития Djano.
Рассмотрим следующий пример. На самом деле я бы на самом деле не писал приложение комментариев, поскольку хороший код для этого уже существует в Интернете, но это для демонстрационных/практических целей:
MySite/блог/models.py
from django.db import models
class post(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=200)
content = models.TextField()
MySite/комментарии/models.py
from django.db import models
from mysite.blog.models import post
class comment(models.Model):
id = models.AutoField()
post = models.ForeignKey(post)
author = models.CharField(max_length=200)
text = models.TextField()
Это то, что я написал выше, импортируя модель из другого приложения и устанавливая ее как внешний ключ, как взаимодействуют приложения Django? Или есть другой/лучший метод для приложений, которые содержат сайт для взаимодействия?
Обновление
По рекомендации в одном ответе я читаю документацию для contrib.contenttypes. Если я правильно это прочитал, я мог бы переписать свое приложение комментариев к примеру следующим образом:
from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contentypes import generic
class comment(models.Model):
id = models.AutoField()
author = models.CharField(max_length=200)
text = models.TextField()
content_type = models.ForeignKey(ContentType)
content_object = generic.GenericForeignKey(content_type, id)
Правильно ли это?