У меня есть приложение, которое состоит из нескольких приложений. Дело в том, что по умолчанию установлено только 1 приложение. Я назвал это «базой». Это base
приложение позволяет пользователю управлять пользователями, группами (но здесь дело не в этом) И должно позволять пользователям устанавливать другие приложения во время выполнения (в этом смысл).
Я создал Application
модель. В моем пользовательском интерфейсе я перечисляю все приложения с кнопкой install
, кроме нее.
Идея заключается в том, чтобы при нажатии этой кнопки:
- Отметить приложение как установлено
- Добавьте его в реестр приложений во время выполнения (это точка блокировки)
- Примените миграцию для этого приложения
Итак, вот несколько примеров кода :
Модель моего приложения:
from django.apps import apps
from django.conf import settings
from django.core import management
from django.db import models
class Application(models.Model):
class Meta:
db_table = 'base_application'
name = models.CharField(max_length=255, unique=True)
verbose_name = models.CharField(max_length=255)
version = models.CharField(max_length=255, null=True, blank=True)
summary = models.CharField(max_length=255)
description = models.TextField(null=True, blank=True)
is_installed = models.BooleanField(default=False)
is_uninstallable = models.BooleanField()
Мой метод установки () будет выглядеть так:
Я знаю там ошибки в этом, и в этом смысл этого вопроса. Я не понимаю, как на самом деле работает реестр приложений.
Обратите внимание, что я также должен предоставить обратную версию (удалить)
def install(self):
self.is_installed = True
self.save()
settings.INSTALLED_APPS.append(self.name)
apps.populate(settings.INSTALLED_APPS)
self.migrate()
My Метод migrate ():
def migrate(self):
management.call_command('makemigrations', self.name, interactive=False)
management.call_command('migrate', self.name, interactive=False)
Обычная ошибка, которую я получаю: No installed app with label ....
Заранее спасибо за вашу помощь. Я могу уточнить, если нужно.