Djangoのドキュメント(段落)リビジョンシステムを最適に実装する方法がわかりません。Django文書改訂システムで段落の順序を維持する方法は?
ドキュメントの改訂履歴を段落ごとに保存します。言い換えれば、ManyToManyField
〜Paragraph
のクラスDocument
があります。段落の順序を維持するために、第3のクラスParagraphContainer
を作成することができる。
私の質問は、誰かが既存の段落の間に新しい段落を追加したときに段落の順序が維持されるように、これをDjangoで実装する良い方法は何ですか?
明白な方法の1つは、ParagraphContainer
クラスのposition属性ですが、このフィールドは挿入(または削除)された段落に続くすべての段落で更新する必要があります。リンクされたリストは別のオプションですが、ドキュメント全体の取得には非常に時間がかかる恐れがあります。何かアドバイス?讲义1コースの
class Paragraph(models.Model):
text = models.TextField()
class Document(models.Model):
paragraphs = models.ManyToManyField(Paragraph, through='DocumentParagraph')
class DocumentParagraph(models.Model):
paragraph = models.ForeignKey(Paragraph)
document = models.ForeignKey(Document)
order = models.PositiveIntegerField()
あなたがParagraph.save
をオーバーライドに見ることができるため、などの順序を更新するためのいくつかのカスタムメソッドを追加する必要があります:
Paragraph.saveのオーバーライドをお寄せいただき、ありがとうございます。あなたの答えは、基本的に私の 'position'属性(あなたの' order')で気にしていたものですが、挿入された後の他の段落をすべて更新することになり、1000段落を超えると)。あるいは、挿入効率と検索効率との間にトレードオフが必要なケースのほんの1つですか? –
もちろん、段落を追加したり取得したりすることは、そのソリューションでは非常に簡単です。挿入にはそれに比べて時間がかかります。私はあなたが再オーダリングが必要なオブジェクトの数と、ユースケースの挿入がどれほど一般的であるかを調べるために、あなたのケースを評価する必要があると思います。私はまた、 '次の'段落を指している 'ForeignKey'を持つソリューションを考えることもできますが、dbの順序付け関数を使用することができないので、これは検索に関してもっと複雑です... –
私はしばらく誰かが斬新な解決策を考えているかどうかを確認してください。そうでなければ、私はあなたの答えを受け入れます、ありがとう! –