プログラムでdjangoにグループを作成したいのですが、ビューではなく、モデルのようなもので(たとえば、移行を使用して)作成したいと考えています。どうやってするの?グーグルとドキュメントにはそれに関する情報はありません(少なくともここではありません:https://docs.djangoproject.com/en/1.7/topics/auth/default/#groups)
2 に答える
わかりました、Django 1.7 の新しい移行システムを使用しているようです。これは、South に似ていますが、まったく同じではありません。
テーブル内のデータの変更を伴う移行はデータ移行であり、通常、移行を行うには Python コードを記述する必要があります。
Django docs から、次の例があります。
# -*- coding: utf-8 -*-
from django.db import models, migrations
def combine_names(apps, schema_editor):
# We can't import the Person model directly as it may be a newer
# version than this migration expects. We use the historical version.
Person = apps.get_model("yourappname", "Person")
for person in Person.objects.all():
person.name = "%s %s" % (person.first_name, person.last_name)
person.save()
class Migration(migrations.Migration):
dependencies = [
('yourappname', '0001_initial'),
]
operations = [
migrations.RunPython(combine_names),
]
移行中に実行するコードはcombine_names
関数内にあり、移行のリストのmigrations.RunPython(combine_names)
エントリによって呼び出されることに注意してください。operations
移行では、他のデータ移行が必要な場合と同様に、そのような関数でグループの作成を行う必要があります。
おそらく次のような行を使用する必要があります
Group = apps.get_model("auth", "Group")
my_group, created = Group.objects.get_or_create(name='group1')
テーブルにその名前のグループが既にある場合は、グループを作成します。
移行中に実行するコードを Python ファイルのルート レベルに置かないでください。これを行うと、移行がインポートされるたびに実行されます。たとえば、 を実行するたびに実行されます./manage.py runserver
。
PSリストmigrations.RunPython
の正しい位置にエントリを配置する必要があります。operations
たとえば、必要なテーブルを削除する操作の後に配置すると機能しません。
グループは、他の Django モデルと同じです。他のものと同じように作成できます。
my_group = Group.objects.create(name='group1')