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