0

既存のモデルがあり、 で注文できるようにしたいと考えています。django-ordered-modelこれは と統合されているため選択しましたdjango.contrib.admin

現在、モデルは によってpk注文されており、その順序を維持したいと考えています。実行すると、次のmanage.py makemigrationsように尋ねられます。

You are trying to add a non-nullable field 'orderable' to Item without a default;
we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows)
 2) Quit, and let me add a default in models.py

どちらのオプションも間違っているようです。私は何をすべきか?

4

2 に答える 2

2

私がしたことは answer 1、 value を提供して0から、移行ファイルに追加することでした:

def set_initial_order(apps, schema_editor):
    model = apps.get_model('exercises', 'Item')
    for s in model.objects.all():
        s.order = s.pk
        s.save()

class Migration(migrations.Migration):
    # ...
    operations = [
        migrations.AlterModelOptions(
            # ...
        migrations.AddField(
            # ...
        migrations.RunPython(
            set_initial_order,
            reverse_code=lambda apps, schema_editor: None
        ),
    ]

これは、最初はすべての順序が 0 になることを意味しますが、すぐに に等しくなるように変更されますpk。逆方向の移行では、列が削除されようとしているため、何もする必要はありません。

于 2014-12-26T19:16:12.817 に答える