2 回目の Django チュートリアルの作業を終えたばかりで、物事をより明確に理解できるようになりました。ただし、サイト内のアプリが互いにどのように相互作用するかはまだ不明です。
たとえば、私がブログ アプリケーションを書いているとしましょう (かなり人気のあるアクティビティのようです)。ブログの投稿とコメントは一緒になる傾向がありますが、Djano 開発の一般的な哲学と同様に、それらは別個のアプリに組み込む必要があるほど十分に明確です。
次の例を考えてみましょう。実際には、コメント アプリを自分で実際に作成することはありません。適切なコードが Web 上に既に存在するためですが、これはデモンストレーション/練習用です。
mysite/blog/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/comments/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)
これは正しいでしょうか?