私はDjangoでフォーラムスレッドを設計しようとしています。ユーザーはスレッドを投稿したり、スレッドに返信したり、他のスレッドの返信に返信することができます(Redditコメントのように)。すべての投稿は日付と著者のような基本情報を共有しているので、私は抽象的にPost
クラスを作ると思っていました。すべての記事は、彼らがに返信されparent
ポストを持つことができるので、私の直感は試してみて、抽象クラスでそれを定義することでした:Djangoモデル - 自己の関係を持つ抽象クラス
class Post(models.Model):
content = models.TextField(max_length=1000)
parent = models.ForeignKey('self', null=True)
createdBy = models.ForeignKey(User)
class Meta:
abstract = True
class Thread(Post):
title = models.CharField(max_length=200)
class ThreadReply(Post):
score = models.IntegerField(default=0)
しかし、結果は、子クラスは、同じの親を持つことができるということですタイプThreadReply
は実際にThread
の親またはThreadReply
の親を持つことができます。
class Post(models.Model):
content = models.TextField(max_length=1000)
createdBy = models.ForeignKey(User)
class Meta:
abstract = True
class Thread(Post):
title = models.CharField(max_length=200)
class ThreadReply(Post):
score = models.IntegerField(default=0)
parentThread = models.ForeignKey(Thread,null=True)
parentReply = models.ForeignKey(ThreadReply,null=True)
しかし、それは感じていない...オブジェクト指向の十分な:私はThreadReply
の両方の関係を定義した場合 一つの解決策はありますか?すべてのThreadReply
オブジェクトは1つの無駄な関係を持ちますが、機能的にはThread
またはThreadReply
に返信する必要があるだけなので、気になります。
[generic relations](https://docs.djangoproject.com/en/1.11/ref/contrib/contenttypes/#generic-relations)をご覧ください – dahrens
一般的な関係は、ありがたくありがとうございます。私は私の一般的な関係の解決策と私はそれを働かせてポストを更新します。 – stackPusher