0

データベース構造をセットアップするときに、Student クラスの「student_id」というフィールドを「primary_key=True」に設定するほど愚かでした。「student_id」を変更する必要がある(まれな)機会があることに気付いたのはずっと後のことです。フォームを介してそれを行うと、Django は自動的に学生を複製しますが、これは私が望んでいるものではありません。

「primary_key=True」を「unique=True」に変更したいのですが、どうすればよいか悩んでいます。

私の現在の計画は、「id」というフィールドを Student クラスに追加し、移行を適用し、シェルに入り、for ループで実行中の番号を割り当てるだけです。

counter = 0
for s in Student.objects.all():
    counter += 1
    s.id = counter
    s.save()

次に、models.py に戻り、「primary_key=True」という行を「unique=True」に変更します。Django が「id」フィールドを主キーのないクラスと同じように処理するようにするにはどうすればよいですか (つまり、新しい学生がデータベースに追加されると、新しい ID が自動的に割り当てられます)。

4

1 に答える 1

0

これは誰にでもできるガイドではありませんが、正しい方向に向けられることを願っています。

idフィールドを追加するときは、 のAutoField代わりに を使用しIntegerFieldます。はAutoField、新しいオブジェクトを追加するときのインクリメントを処理します。

フィールドを作成して入力したら、 を設定primary_key=Trueしたり、 から削除したりできますstudent_id

id主キーを手動で設定しないと、Django が自動的に明示的なフィールドを作成するため、最終的にはモデルから明示的なフィールドを削除できるはずです。

于 2015-08-28T16:26:38.000 に答える