如何拆分models.py以在Django中使用双重导入陷阱来封装文件

时间:2016-03-29 17:58:03

标签: python django django-allauth

我有一个大文件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.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)

在模型/ init .py

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

在设置AUTH_USER_MODEL = 'members.Account'

模型中的所有类都有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'>.

任何想法如何避免它?

感谢。

增加:

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',
    'django_migration_fixture',
    'widget_tweaks',
    'tz_detect',
]

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

INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + PROJECT_APPS

1 个答案:

答案 0 :(得分:0)

嗯,我认为这个问题与allauth内部模型有关。 我修复了它只是创建了一个名为acc的新应用程序,并将这两个allauth类插入到此应用程序中的models.py.

现在在设置中

AUTH_USER_MODEL = 'acc.Account'

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

现在我可以将models.py从成员拆分到带有单独文件的models子目录,并且它运行良好,没有运行时错误。