Я хочу создавать группы в django программно, но не в виде, а скорее в какой-то модели (например, используя миграции). Как это сделать? В google и документах нет информации (по крайней мере, здесь: https://docs.djangoproject.com/en/1.7/topics/auth/default/#groups)Создавать группы django программно
ответ
Хорошо, похоже, вы используете новую систему миграции Django 1.7. Это похоже на то, что не похоже на Юг.
Перенос, связанный с изменением данных в таблицах, представляет собой data migration, и вам обычно нужно написать код 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
; он не будет работать, если вы поместите его после операции, которая удалит нужную таблицу, например.
Я принимаю этот ответ, потому что он более расширен и из-за напоминания мне проверить, нет ли уже определенной группы, спасибо – b174662
Группы, как и любая другая модель Django. Вы можете создать их так, как если бы вы что-нибудь еще.
my_group = Group.objects.create(name='group1')
Я знаю это ... Но этот код работает только на виду, не так ли? Если я ошибаюсь, расскажите, где я должен это поставить. – b174662
Я не понимаю ваш вопрос. Вы можете запустить этот код в любом месте: в миграции, в оболочке, в пользовательской команде управления ... –
Я хочу выполнить это только один раз (например, модели создаются один раз). Когда я запрашиваю его при переносе, он запускается каждый раз при запуске сервера. – b174662
Хорошо, вам нужно уточнить, что вы подразумеваете под «миграциями». И я действительно очень надеюсь, что вы имеете в виду, что вы используете [Юг] (http://south.aeracode.org/), и вы пишете [миграцию данных] (http://south.readthedocs.org/en /latest/tutorial/part3.html#data-migrations). –