Создание групп 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')