this questionと似ていますが、これらの回答はどれも理想的ではありません。データベーステーブルの並べ替え順序列を使用する代わりに
class Parent(models.Model):
id = models.AutoField(primary_key=True)
class Child(models.Model):
id = models.AutoField(primary_key=True)
parent = models.ForeignKey(Parent)
SQLで(私は右のこのコードを持って願っています):
CREATE TABLE parent (
id integer PRIMARY KEY
);
CREATE TABLE child (
id integer PRIMARY KEY
parent_id integer REFERENCES parent
);
Child
オブジェクトが特定に属するようにすることを行うことができますか
のPostgreSQLで使用されるこのDjangoのモデルを考えてみましょうParent
は並べ替えることができますか?ドラッグドロップUIを使用すると、ユーザーはChild
をドラッグして更新した注文を保存することができます。 Child
の作成、更新、削除は1回の操作で済みます。つまり、Parent
で更新する必要はありません。
私は、各アイデアは理想的ではない理由をいくつか不完全なアイデアを持っている:ユーザによって提供varchar型をアルファベット順に
ソート
Child
- これは、特定の文字で始まる名前を考えるようにユーザーを強制的に正当な理由がなければ、創造性のストレスのある量を必要とします。Parent
で、
Child
オブジェクトの主キーに対応する整数の配列を格納するが - 作成および削除するための複数の操作を必要とし、Parent
の配列は、たびに更新される必要があるであろう。データベースによるデータの完全性の保証はありません。整数列で並べ替えます。
Child
を作成するときは、次の整数を見つけるために追加の読み取りが必要です。もう一つの問題は、整数間のギャップがなくなったときに、挿入されたオブジェクトの背後にあるオブジェクトを押し戻さなければならないということです。この状況は、最後のオブジェクトを繰り返し取得し、最初に置くことによって人為的に強制される可能性があります。各
Child
には、次の/前の番号を参照する整数IDを格納します。これは、3からのハッキーな問題のいくつかを解決しますが、それは不合理に非効率的で、物流上の課題です。 (さらに参加伴うかjsonb
を有する第2のテーブルを交換しないでください)この要件のいずれかの雄弁なソリューションが
を使用してください。説明した問題は本当ですが、親あたりの子供の数が非常に多い場合を除き、おそらく重要ではありません。 –