Создание групп django программно

Я хочу создавать группы в django программно, но не в представлении, а скорее в чем-то вроде модели (например, используя миграции). Как это сделать? В google и docs нет информации об этом (по крайней мере, не здесь:https://docs.djangoproject.com/en/1.7/topics/auth/default/#groups)

2 ответов


Хорошо, похоже, вы используете новую систему миграции Django 1.7. Это похоже на юг, но не совсем так.

миграция, которая включает в себя изменение данных в таблицах, является миграция данных, и вам обычно нужно написать код Python для выполнения миграции.

из документов Django есть такой пример:

# -*- 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.

P. S. вам нужно положить свой migrations.RunPython запись в правой точке operations list; он не будет работать, если вы поместите его после операции, которая удаляет нужную таблицу, например.


группы похожи на любую другую модель Django. Вы можете создавать их, как и все остальное.

my_group = Group.objects.create(name='group1')