ФорумПрограммированиеPythonDjango → Порядок загрузки app/модулей при старте джанги

Порядок загрузки app/модулей при старте джанги

  • john2dark

    Сообщения: 99 Репутация: N Группа: Адекваты

    Spritz 25 марта 2016 г. 21:24

    Не совсем до конца понимаю каким образом (последовательности) грузится структура проекта.
    Получил ошибку выполнения:

    RuntimeError: Model class models.account.Account doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

    Есть модель

    class Resources(models.Model):
        user = models.ForeignKey(settings.AUTH_USER_MODEL,
                                 on_delete=models.CASCADE)
        server = models.ForeignKey(Server,
                                   on_delete=models.CASCADE)
        traffic_left = models.FloatField(_(u'traffic left'),
                                         blank=False,
                                         null=False,
                                         default=0.0)
        requests_left = models.IntegerField(_(u'requests left'),
                                            blank=False,
                                            null=False,
                                            default=0)
    
        class Meta:
            db_table = 'resources'
            abstract = False
    

    Если в коде

    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

    заменить settings.AUTH_USER_MODEL на get_user_model()
    то приключится ошибка

    django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

    т.е. как и в первом случае, получается что нарушена последовательность загрузки.
    Если отключить обращение к этой модели из формы, то всё работает нормально.
    Я конечно попробую что то сделать через app_label, но не уверен что это православное решение.

    Вот это в конфиге:

    DJANGO_APPS = [
        'django.contrib.auth',
        'django.contrib.sites',  # required by django-allauth
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    ]
    
    THIRD_PARTY_APPS = [
        'allauth',
        'allauth.account',
        'allauth.socialaccount',
        'allauth.socialaccount.providers.facebook',
        'allauth.socialaccount.providers.google',
        'allauth.socialaccount.providers.twitter',
        'allauth.socialaccount.providers.vk',
        'django_migration_fixture',
        'widget_tweaks',
        'tz_detect',
    ]
    
    PROJECT_APPS = [
        'core',
        'admin',
        'members',
    ]
    
    INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + PROJECT_APPS
    
    AUTH_USER_MODEL = 'members.Account'

    Может подскажет кто?

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 25 марта 2016 г. 21:27, спустя 2 минуты 43 секунды

    models.account.Account

    @john2dark, вот это меня смущает. Покажи ка твое апликейшен фотку структуры файловой где юзер твой переопределенный

    Сапожник без сапог
  • john2dark

    Сообщения: 99 Репутация: N Группа: Адекваты

    Spritz 25 марта 2016 г. 21:32, спустя 4 минуты 49 секунд

    что то не прилипла

    во, вышло

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 25 марта 2016 г. 21:34, спустя 2 минуты 15 секунд

    содержимое models/__init__.py сюда давай

    Сапожник без сапог
  • john2dark

    Сообщения: 99 Репутация: N Группа: Адекваты

    Spritz 25 марта 2016 г. 21:35, спустя 33 секунды

    # -*- coding: utf-8 -*-
    from account import *
    from organization import *
    from server import *
    from project import *
    
    # __all__ = [
    #     'Account',
    #     'Organization',
    #     'Project',
    #     'Server',
    # ]
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 25 марта 2016 г. 21:39, спустя 4 минуты 2 секунды

    попробуй модели account объявить app_label = 'members' может схавает )

    Сапожник без сапог
  • john2dark

    Сообщения: 99 Репутация: N Группа: Адекваты

    Spritz 25 марта 2016 г. 21:45, спустя 5 минут 45 секунд

    Какой то конфликт походу

    RuntimeError: Conflicting 'account_groups' models in application 'members': <class 'members.models.account.Account_groups'> and <class 'models.account.Account_groups'>.

    Спустя 265 сек.

    причём у меня нету members.models.account.Account_groups

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 25 марта 2016 г. 22:08, спустя 23 минуты 30 секунд

    @john2dark, это подгружаются рантайм модели атачатся к твоей так как у тебя это юзер, то эти штуки добавляют поддержку ACL

    Спустя 13 сек.

    вообще я думаю что банально не поддерживается )

    Сапожник без сапог
  • john2dark

    Сообщения: 99 Репутация: N Группа: Адекваты

    Spritz 25 марта 2016 г. 22:19, спустя 10 минут 56 секунд

    А может проблема связана с чем то из этой оперы:
    вот сама форма

    from django.utils.translation import ugettext_lazy as _
    from models import Resources
    import logging
    
    from django import forms
    
    logger = logging.getLogger(__name__)
    
    
    class ProjectNewForm(forms.Form):
        project_name = forms.CharField(required=True,
                                       min_length=2,
                                       max_length=14,
                                       label=_(u'Project name'))
        project_description = forms.CharField(required=True,
                                              max_length=2000,
                                              widget=forms.Textarea(
                                                  attrs={'rows': 4}
                                              ),
                                              label=_(u'Project description'))
        # server = forms.ModelChoiceField(queryset=Resources.objects.all().values_list('id', 'server').order_by('name'),
        #                                 required=True,
        #                                 label=_(u'Server'))
        # organization = forms.BooleanField(required=True,
        #                                   error_messages=agree_errors,
        #                                   label=_(u'Organization'))
    
        class Meta:
            fields = [
                'project_name',
                'project_description',
                # 'server',
                # 'organization',
            ]
    

    ошибка вылезает когда

    from models import Resources

    Спустя 264 сек.

    Как вариант: Traps for the Unwary in Python’s Import System — Nick Coghlan's Python Notes 1.0 documentation [python-notes.curiousefficiency.org]

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 25 марта 2016 г. 23:28, спустя 1 час 8 минут 45 секунд

    Ты в форме юзаешь квери? Я верно понял? Тут Лейзи надо я думаю

    Сапожник без сапог
  • john2dark

    Сообщения: 99 Репутация: N Группа: Адекваты

    Spritz 26 марта 2016 г. 0:46, спустя 1 час 17 минут 48 секунд

    Планирую использовать, надо выдрать данные с таблицы для селект-бокса формы, но еще даже не добрался до этого момента.
    Споткнулся на этой херне с рантаймом. Первый проект на джанге, спотыкаюсь пока на каждом шаге.

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 26 марта 2016 г. 0:52, спустя 6 минут 1 секунду

    @john2dark, ну это нормально я считаю

    Сапожник без сапог
  • john2dark

    Сообщения: 99 Репутация: N Группа: Адекваты

    Spritz 26 марта 2016 г. 3:05, спустя 2 часа 12 минут 58 секунд

    Решил проблему кардинально. Посносил нахер все поддиректории с __init__ типа models, views, forms. Вынес все просто в одиночные файлы models.py, views.py и forms.py
    Во всяком случае заработало как мне нужно и конфликтов нет. Потом буду искать решения как вернуть всё в подпакеты.
    Проблема с "The double import trap" походу есть и я на неё наткнулся в 1.9.

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 26 марта 2016 г. 3:10, спустя 5 минут 50 секунд

    @john2dark, ну да, не стоит баловаться слишком. Я кгда начал с жангой так там такой зоопарк из технологий у меня в итоге получился что пиздец :)

    Кстати раз ты только начал и еще не задрот типа эдворда, то рекомедную тебе сразу к мягкому и теплому привыкать :

    phpdude/django-macros-url [github.com]
    phpdude/docker-django-webpack-skeleton [github.com]
    phpdude/django-template-names [github.com]

    Сапожник без сапог
  • john2dark

    Сообщения: 99 Репутация: N Группа: Адекваты

    Spritz 26 марта 2016 г. 3:16, спустя 5 минут 58 секунд

    Клёва, спасибо :)
    поковыряю.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!