DJANGO Установка приложения во время выполнения - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть приложение, которое состоит из нескольких приложений. Дело в том, что по умолчанию установлено только 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 ....

Заранее спасибо за вашу помощь. Я могу уточнить, если нужно.

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