我想自动化我的数据库上的所有数据创建,为此我使用不同的命令。
我知道如何为我的模特做这件事,因为我知道它的领域。
,但是如何对组模型这样做呢?
from django.contrib.auth.models import Group当我查询它的字段时,我得到:'user','id','name',‘权限’
[f.name for f in Group._meta.get_fields()]但是在Admin中,我只看到为了创建一个组,需要name和permission字段:
命令
import pandas as pd
from django.contrib.auth.models import Group
from django.core.management.base import BaseCommand
tmp_data_groups=pd.read_csv('static/data/groups.csv',sep=',', encoding='iso-8859-1').fillna(" ")
class Command(BaseCommand):
def handle(self, **options):
groups = [
Group(
name=row['name'],
permissions=row['permissions']
)
for _, row in tmp_data_groups.iterrows()
]
Group.objects.bulk_create(groups)我得到了这个错误(使用命令或shell):
TypeError:禁止直接分配到多对多组的前侧.使用permissions.set()代替。
使用外壳的示例:
我有一个叫“客户”的小组,它分配了所有的任务。
Group.objects.all()[0].permissions.all() #Clientes is the only group created我打算创建一个名为"NuevosClientes“的新组(英文为NewClients)。
Group.objects.create(name='NuevosClientes', permissions='Can view user')我试过但得到了:
TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use permissions.set() instead.我应该如何准备我的CSV字段以供读取,并使用命令生成所需的新组?
| name | permissions | | | |
|----------------|--------------------|---|---|---|
| NuevosClientes | Can view user | | | |
| NuevosClientes | Can add permission | | | |
| NuevosClientes | Can delete user | | | |
| NuevosClientes | Can delete cart | | | |更新1
我已经创建了我的组,但是现在我需要创建要添加到这些组中的权限。
但是,为了创建权限,我还需要创建ContentType对象。
无论如何,ContentType对象都有这些参数。
content_type = ContentType.objects.get(app_label='app_name', model='model_name')根据另一篇文章中的这篇文章,每次我们在django_content_type表中创建模型一个条目时,都会在此表中为该模型添加一个新的记录。
我应该使用什么条目来创建ContentType对象?app_label='app_name‘和model='model_name’的值应该是什么?
django_content_type表中有很多条目:
`logentry`, `permission`, `group`, `user`, `contenttype`, `session`, and also for my own models. 发布于 2019-05-05 07:08:00
如果已经保存了与该关系相关的对象,则只能将项添加到多到多的关系中。
因此,您可能首先要保存已构建的Group,然后添加权限。注意, [Django-doc]也是一个模型,所以您不能只在这里使用一个字符串。
因此,您的命令如下所示:
from django.contrib.auth.models import Group, Permission
# ...
g1 = Group.objects.create(name=row['name'])
p1, __ = Permission.objects.get_or_create(name=row['permissions'])
g1.permissions.add(p1)因此,我们首先构造一个具有给定名称的Group对象,然后检索相关的Permission对象,然后将该权限p1添加到给定组的permissions中。如果可以有多个权限,则需要使其更加复杂。
仍然可以通过执行两次传递来使用bulk_create:首先使用给定的名称构造所有组,然后在第二次传递中检索所有相关权限并正确设置这些权限。
https://stackoverflow.com/questions/55989579
复制相似问题