Как создать разрешения встроенной модели для неуправляемых моделей? - PullRequest
0 голосов
/ 03 марта 2020

У меня есть такая модель:

class Venue(models.Model):
    name = models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'venue'
        permissions = [
            ('change_venue', 'Can change venue'),
        ]

Не управляется, потому что она уже существует в базе данных (которая была создана до django проекта).

Я хочу использовать разрешения встроенной модели django, но они не создаются по умолчанию. Я попытался добавить их, изменив поле Meta.permissions, но получил ошибку: The permission codenamed 'change_venue' clashes with a builtin permission for model 'events.Venue'

Что мне делать? Просто выполнить миграцию и создать разрешения вручную?

1 Ответ

0 голосов
/ 03 марта 2020

Исправлено путем создания разрешений в App.ready hook:

from django.apps import AppConfig
from django.contrib.auth.management import create_permissions


class MyAppConfig(AppConfig):
    name = 'myapp'

    def ready(self):
        create_permissions(self)

Не знаю, считается ли это действительным решением, хотя

Редактировать 1

Метод выше не работает для новой базы данных, потому что модели "не были готовы / созданы", когда приложение готово. Поэтому я переключился на сигнал post_migrate, и все было в порядке.

Edit 2

Через некоторое время я обнаружил глобальную проблему о том, почему у меня нет разрешений и типов контента в первом место: я просто не делал миграцию для неуправляемых моделей. С миграциями все нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...