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

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

Ответ 1

Хорошо, похоже, вы используете новую систему миграции 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; он не будет работать, если вы поместите его после операции, которая удалит нужную таблицу, например.

Ответ 2

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

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