Создайте модель в app1 при загрузке app2 - PullRequest
0 голосов
/ 10 января 2019

Представьте, что у меня есть приложение1 под названием "прайс-листы" и приложение2 под названием "торговые площадки".

В приложении marketplaces я хочу автоматически создать прайс-листы.PriceList, если его еще нет. Этот прайс-лист должен использоваться в сигналах для автоматического заполнения прайс-листа в зависимости от нескольких факторов.

В настоящее время я использую что-то подобное в своих сигналах:

price_list, _ = PriceList.objects.get_or_create(
    currency='EUR', is_default=False, customer_type='CONS',
    remarks='Marketplace')

Мне не нравится этот подход, так как он повторяется несколько раз и просто хочу, чтобы прайс-лист был создан наверняка.

Мой вопрос. Как мне получить get_or_create модель-объект в другом приложении каждый раз, когда django перезапускается?

Решение

В вашем app.__init__.py определите вручную ваш AppConfig. В django 1.10

это, похоже, не обнаруживается
default_app_config = 'marketplaces.apps.MarketPlacesConfig'

Переопределите ваш готовый метод appconfig:

class MarketPlacesConfig(AppConfig):
    name = 'marketplaces'

    def ready(self):
        from pricelists.models import PriceList, PriceListItem
        price_list_marketplaces, _ =  PriceList.objects.get_or_create(
            **settings.MARKETPLACES['price_list']

1 Ответ

0 голосов
/ 10 января 2019

AppConfig.ready () с django.db.models.signals - единственный способ, о котором я могу думать.

...