Найти - Пользователи
Полная версия: Как разделить models.py на несколько файлов без конфликта
Начало » Django » Как разделить models.py на несколько файлов без конфликта
1
Hakman
Есть один большой файлик models.py с кучей классов внутри, хочу разделить его на несколько файлов в поддиректорию /models
Текущая стуктура проекта:
project
├── core
| ├── settings
| | └── base.py
| ├── __init__.py
| ├── urls.py
| ├── models.py
| ├── views.py
| └── wsgi.py
├── members
| ├── migrations
| ├── templates
| ├── __init__.py
| ├── forms.py
| ├── models.py
| ├── urls.py
| └── views.py
├── templates
| ├── pages
| | └── register.html
| └── base.html
└── manage.py

Хочется получить что то типа:
├── members
| ├── models
| | ├── __init__.py
| | ├── account.py
| | └── blabla.py
| ├── migrations
| ├── templates
| ├── __init__.py
| ├── forms.py
| ├── urls.py
| └── views.py

На борту Python 2.7, Django 1.9 и django-allauth, в файле account.py всего 2 класса:

class MyUserManager(UserManager) и class Account(AbstractBaseUser, PermissionsMixin).

В models/init.py

# -*- coding: utf-8 -*-
from account import *
from blabla import *

В settings:
AUTH_USER_MODEL = 'members.Account'

DJANGO_APPS = [
'django.contrib.auth',
'django.contrib.sites',
'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',
]

PROJECT_APPS = [
'core',
'members',
]

INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + PROJECT_APPS

Все классы в моделях имеют app_label = ‘members’.

members/__init__.py пустой

При старте получаю:
RuntimeError: Conflicting ‘account_groups’ models in application ‘members’:
<class ‘members.models.account.Account_groups’> and <class ‘models.account.Account_groups’>.

Исходя из ошибки, подозреваю что идёт двойной импорт.
Может подскажет кто, как можно этого избежать?
Hakman
Если кому интересно, проблема решена путём выноса всего, что относится к allauth в отдельное app.
Это позволило избежать double import trap и в итоге разбить файл members/models.py на отдельные в поддире models/

Соответственно в сеттингах изменилось
AUTH_USER_MODEL = 'acc.Account'

и добавилось
PROJECT_APPS = [
'acc',
'core',
'members',
]
plusplus
Hakman
Если кому интересно, проблема решена путём выноса всего, что относится к allauth в отдельное app.Это позволило избежать double import trap и в итоге разбить файл members/models.py на отдельные в поддире models/Соответственно в сеттингах изменилось

Хех, я думал, что нужно край разделить модели одного приложения и поэтому не стал давать столь очевидный совет)
mirak
Извините за оффтоп, но как вы делаете такой текстовый граф структуры папок и файлов?
Firik
mirak
Предполагаю, используется утилита tree
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB