10

プログラムでdjangoにグループを作成したいのですが、ビューではなく、モデルのようなもので(たとえば、移行を使用して)作成したいと考えています。どうやってするの?グーグルとドキュメントにはそれに関する情報はありません(少なくともここではありません:https://docs.djangoproject.com/en/1.7/topics/auth/default/#groups

4

2 に答える 2

12

わかりました、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たとえば、必要なテーブルを削除する操作の後に配置すると機能しません。

于 2014-08-03T15:10:23.963 に答える
6

グループは、他の Django モデルと同じです。他のものと同じように作成できます。

my_group = Group.objects.create(name='group1')
于 2014-08-03T14:46:20.293 に答える