我想以编程方式在django中创建组,但不是在视图中创建组,而是在模型中创建组(例如使用迁移)。怎么做?谷歌和文档中没有关于它的信息(至少不在这里:https://docs.djangoproject.com/en/1.7/topics/auth/default/#groups)
答案 0 :(得分:12)
好的,似乎你正在使用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
列表中的正确位置;例如,如果你在删除所需表的操作之后放置它,它将无法工作。
答案 1 :(得分:6)
群组就像任何其他Django模型一样。您可以像创建其他任何内容一样创建它们。
my_group = Group.objects.create(name='group1')