Я хочу автоматизировать создание всех данных в моей базе данных, для этого я использую разные команды.
Я знаю, как это сделать для моих моделей, потому что я знаю их поля.
Но как это сделать для модели группы?
from django.contrib.auth.models import Group
Когда я запрашиваю его поля, я получаю: 'user', 'id', 'name ',' permissions '
[f.name for f in Group._meta.get_fields()]
Но в админ-панели я вижу только, что для создания группы необходимы поля 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)
Я получаю эту ошибку (с командой или в оболочке):
TypeError: Прямое назначение передней сторонемножество «многие ко многим» запрещено.Вместо этого используйте permissions.set ().
Пример использования оболочки:
У меня есть группа с именем "Clientes", и она назначила все разрешения,
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.