Django 属性错误:模块“appname”没有属性模型

2024-01-28

我知道我的问题可能涉及相互/循环导入,并且我在发布之前确实进行了搜索。我发现当前解决我的问题的唯一解决方案是将导入移至其中一个文件的末尾,就在实际使用导入的函数之前。但我也读到这是非常不推荐的。

推荐的解决方案,只需执行以下操作:

in A.py -> import B

and in B.py -> import A

然后再访问该功能,还是不行。

所以我的 Django 应用程序中有三个应用程序:“core”、“notifications”和“accounts”。以下是他们的片段:

核心模型:

from django.db import models
from django.contrib.auth.models import User
import notifications.models
from z_misc import general_scripts

# Create your models here.

class BaseModel(models.Model):
    created_date = models.DateTimeField(auto_now_add=True)
    modified_date = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True

这是我的使用方法Notification in core.models:

# inspect mb for each artist
### Assume class is defined and @classmethod is intended, having some formatting pains here
@classmethod
def refresh_from_mb(cls):
    artists = cls.get_artists_with_subs()
    for artist in artists:
        added_rgs = general_scripts.refresh_artist(artist.mbid)

        for rg in added_rgs:
            new_notification = Notification(artist_id=artist.id, release_group=rg)
            new_notification.save()

通知.模型:

from django.db import models
import core.models
import accounts.models

class Notification(core.models.BaseModel):
    artist_id = models.OneToOneField(core.models.Artist, related_name="artist_notifications", null=False)
    release_group = models.OneToOneField(core.models.ReleaseGroup, related_name="rg_notifications", null=False)

    def get_rg_type(self):
        return self.release_group.type

账户.模型:

from django.db import models
from django.contrib.auth.models import User
import core.models
from django.db.models import Q

# Create your models here.

class UserProfile(core.models.BaseModel):

    #TODO: add email_activated = models.BooleanField(default=False)

    user = models.OneToOneField(User, related_name="user_profile")

正如你所看到的,我遵循建议而不是这样做from进而import,但更确切地说import然后使用完整的符号。这不起作用。完整的错误回溯是:

Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x10fa9af28>
Traceback (most recent call last):
  File "/Users/username/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/utils/autoreload.py", line 228, in wrapper
    fn(*args, **kwargs)
  File "/Users/username/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/core/management/commands/runserver.py", line 117, in inner_run
    autoreload.raise_last_exception()
  File "/Users/username/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/utils/autoreload.py", line 251, in raise_last_exception
    six.reraise(*_exception)
  File "/Users/username/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/utils/six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "/Users/username/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/utils/autoreload.py", line 228, in wrapper
    fn(*args, **kwargs)
  File "/Users/username/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/__init__.py", line 27, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/Users/username/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/apps/registry.py", line 108, in populate
    app_config.import_models()
  File "/Users/username/.virtualenvs/bap_dev/lib/python3.6/site-packages/django/apps/config.py", line 202, in import_models
    self.models_module = import_module(models_module_name)
  File "/Users/username/.pyenv/versions/3.6.1/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 978, in _gcd_import
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load
  File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
  File "/Users/username/PycharmProjects/artist_notify/core/models.py", line 3, in <module>
    import notifications.models
  File "/Users/username/PycharmProjects/artist_notify/notifications/models.py", line 3, in <module>
    import accounts.models
  File "/Users/username/PycharmProjects/artist_notify/accounts/models.py", line 8, in <module>
    class UserProfile(core.models.BaseModel):
AttributeError: module 'core' has no attribute 'models'

我不确定此时我能做些什么来解决这个问题。除了开始将导入语句移动到文件的中间/末尾,这似乎是一个很大的禁忌。

请不要建议我使用from app.models import ModelName,因为这就是我之前使用的,直到由于循环导入而开始出现错误。


循环引用,尤其是导入,是您在设计过程中需要避免的。 IOW,这是一个设计错误,而不是一个实现错误。你的情况,简化后,是(A -> B表明A被导入/导入到B, and N=通知,C= 核心,并且A= 账户):

N -> C
C -> N
A -> C
A -> N

如果我们以图形方式绘制它,就更容易看出我们需要解决之间的循环C and N only:

即我们只需要删除之间的箭头/导入之一C and N.

Django 特例

Django 有许多可用于解耦循环引用图的功能,例如:

使用字符串引用:到外键中的模型,所以而不是

from core.models import ReleaseGroup  # this is how you should import models
class Notification(...):
    release_group = models.OneToOneField(ReleaseGroup, ..)

你会做:

# no import of ReleaseGroup model
class Notification(...):
    release_group = models.OneToOneField('core.models.ReleaseGroup', ..)

Django 有一些像这样有用的功能,例如您可以多次遍历关系并避免导入,例如代替:

Notification.objects.filter(release_group=ReleaseGroup.objects.get(pk=1))

这需要同时导入Notification and ReleaseGroup, 你可以做:

Notification.objects.filter(release_group__pk=1)

一般情况

一般情况下你需要使用组合、提取、移动中的一种或多种。

combine:这个很简单,如果你结合起来C and N到一个更大的模块中,那么您就解决了循环性(一个文件内的循环性非常好)。

extract:如果您可以找到可以拉出到新模块中的某些代码子集,使得该新模块位于导入图的顶部或底部,那么您就解决了循环性,例如如果你有两个模块,有很多模型,但只有其中两个有循环引用(这里是 X2 和 Y2):

x.py:
class X1(Model): 
    ...
class X2(Model):
    y2 = ForeignKey(Y2)
class X3...

y.py:
class Y1(...): ..
class Y2(Model):
    x2 = ForeignKey(X1)
...

那么循环性可以通过引入一个新模块来解决(x.py和y.py将分别从xy.py导入X2和Y2)

xy.py:
class X2(Model):
    y2 = ForeignKey(Y2)
class Y2(Model):
    x2 = ForeignKey(X1)    

将其他模型留在原处。 (注意:提取物也只能与一种模型一起使用——我认为你的BaseModel可能是提取的候选者)。

move:与 extract 的精神类似,您找到一小段导致循环的代码,并将其移动到另一个现有模块,这样它就不再导致循环。在上面的示例中,X2 可能已移动到 y.py,或者 Y2 可能已移动到 x.py。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 属性错误:模块“appname”没有属性模型 的相关文章

  • 是否可以在 IPython 控制台中显示 pandas 样式?

    是否可以显示熊猫风格 https pandas pydata org pandas docs stable user guide style html在 iPython 控制台中 Jupyter 笔记本中的以下代码 import panda
  • 我可以在 matplotlib 中的绘图左侧放置一个垂直颜色条吗?

    来自颜色条方法的 matplotlib 命令摘要 http matplotlib org api pyplot api html highlight colorbar matplotlib pyplot colorbar我知道关键字参数or
  • 在Python中将大文件(25k条目)加载到dict中很慢?

    我有一个大约有 25000 行的文件 它是 s19 格式的文件 每行就像 S214780010 00802000000010000000000A508CC78C 像这样的事情怎么样 我做了一个测试文件 只有一行S21478001000802
  • DataFrame.loc 的“索引器太多”

    我读了关于切片器的文档 http pandas pydata org pandas docs stable advanced html using slicers一百万次 但我从来没有理解过它 所以我仍在试图弄清楚如何使用loc切片Data
  • 在多核上运行 python 线程

    我知道Python 2 7不允许在不同的内核上运行多个线程 你需要使用multiprocessing模块以实现某种程度的并发性 我正在看concurrent futuresPython 3 4 中的模块 是否使用ThreadPoolExec
  • 为什么我会收到 ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

    以下代码给出了值错误 major males for row in recent grads if recent grads Men gt recent grads Women major males append recent grads
  • 对法语文本进行词形还原[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一些法语文本需要以某种方式进行处理 为此 我需要 首先 将文本标记为单词 然后对这些单词进行词形还原以避免多次处理相同的词根 据我
  • 如何在Python中手动对数字列表进行排序?

    规格 Ubuntu 13 04 Python 3 3 1 背景 Python的初学者 遇到了这个 手动排序 问题 我被要求做的事情 让用户输入 3 个数值并将它们存储在 3 个不同的变量中 不使用列表或排序算法 手动将这 3 个数字从小到大
  • 右键单击 QPushButton 上的 contextMenu

    对于我的应用程序 我在 Qt Designer 中创建了一个 GUI 并将其转换为 python 2 6 代码 关于一些QPushButton 与设计器创建 我想添加右键单击上下文菜单 菜单选项取决于应用程序状态 如何实现这样的上下文菜单
  • 使用 python 从 CSV 创建字典

    我有一个 CSV 格式的文件 其中 A B 和 C 是标题 我如何以Python方式将此CSV转换为以下形式的字典 A 1 B 4 C 7 A 2 B 5 C 8 A 3 B 6 C 9 到目前为止我正在尝试以下代码 import csv
  • Python FTP下载550错误

    我编写了一个 ftp 爬虫来下载特定文件 它会一直工作 直到找到要下载的特定文件 然后抛出此错误 ftplib error perm 550 该文件存在于我的下载文件夹中 但文件大小为 0 kb 我需要转换某些内容才能下载吗 我可以访问 f
  • Kivy TextInput 水平和垂直对齐(文本居中)

    如何在 Kivy 的 TextInput 中水平居中文本 I have the following screen But I want to centralize my text like this 这是我的 kv 语言的一部分 BoxLa
  • Python GTK3 Treeview 向上或向下移动选择

    如何在树视图中向上或向下移动所选内容 我的想法是 我可以使用向上和向下按钮将选择向上移动一行或向下移动一行 我的 Treeview 使用 ListStore 不确定这是否重要 首先 我将使用我熟悉的 C 代码 如果您在将其翻译为 Pytho
  • 在Python中随机交错2个数组

    假设我有两个数组 a 1 2 3 4 b 5 6 7 8 9 我想将这两个数组交错为变量 c 注意 a 和 b 不一定具有相同的长度 但我不希望它们以确定性的方式交错 简而言之 仅仅压缩这两个数组是不够的 我不想要 c 1 5 2 6 3
  • 在 4K 屏幕上使用 Matplotlib 和 TKAgg 或 Qt5Agg 后端

    我在 Ubuntu 16 04 上使用 Matplotlib 2 0 和 Python 3 6 来创建数据图 电脑显示器的分辨率为 4k 分辨率为 3840x2160 绘图数字看起来非常小 字体也很小 我已经尝试过TKAgg and Qt5
  • 如何在类型提示中定义元组或列表的大小

    有没有办法在参数的类型提示中定义元组或列表的大小 目前我正在使用这样的东西 from typing import List Optional Tuple def function name self list1 List Class1 if
  • python 中的 F 字符串前缀给出语法错误[重复]

    这个问题在这里已经有答案了 我有一个名为 method 的变量 它的值是 POST 但是当我尝试运行时print f method method is used 它不断在最后一个双引号处给出语法错误 我找不到它这样做的原因 我正在使用 py
  • Django 中使用外键的抽象基类继承

    我正在尝试在 Django 支持的网站上进行模型继承 以遵守 DRY 我的目标是使用一个名为 BasicCompany 的抽象基类来为三个子类提供通用信息 Butcher Baker CandlestickMaker 它们位于各自的应用程序
  • 如何创建简单的梯度下降算法

    我正在研究简单的机器学习算法 从简单的梯度下降开始 但在尝试用 python 实现它时遇到了一些麻烦 这是我试图重现的示例 我获得了有关房屋的数据 居住面积 以英尺为单位 和卧室数量 以及最终的价格 居住面积 英尺2 2104 卧室 3 价
  • 如何使 Django 自定义管理命令参数不再需要?

    我正在尝试在 django 中编写自定义管理命令 如下所示 class Command BaseCommand def add arguments self parser parser add argument delay type int

随机推荐

  • 具有嵌套模型类的 Razor 视图

    我有一个嵌套类 例如 public class Jar public IEnumerable
  • 使用 PHP 进行 Xpath 查询(取两个值)

    这是我正在使用的 XML 代码
  • 加载动态 .ini 标识符

    我正在创建我的学生计划表的虚拟版本 它基本上可以让你记下你有哪些科目的作业 Here is the interface 用户从组合框中选择主题并在相邻的备忘录中输入一些注释 完成后 他们将单击 保存 按钮 将其保存到 ini 文件中 所选日
  • 无法链接到 fftw3 库

    我正在编译一个测试程序来测试fftw3 ver3 3 4 由于它不是使用 root previlidge 安装的 所以我使用的命令是 gcc lm L home my name opt fftw 3 3 4 lib I home my na
  • 使用 selenium 检查域

    我正在尝试在 VBA 中使用 selenium 检查某些域 这是我的尝试 Option Explicit Sub Check Domain Dim bot As New WebDriver Dim sDomain As String sDo
  • JQuery 模态框和 Iframe

    我一直在使用 Simple Modal 但我觉得它不能满足我目前的需要 是否有一个模态框支持加载外部文件并允许这些外部文件关闭模态框并将父页面重定向到某个url 我想做的一个例子 您有一个用户列表 您可以单击 添加用户 然后会弹出一个带有表
  • 基于排序的分区(如快速排序)

    这是一道面试题 给定一个包含 3 种对象白色 红色 黑色的数组 应该实现数组的排序 使其看起来如下 白色 黑色 红色 面试官说 你不能使用计数排序 他的提示是考虑一些与快速排序相关的技术 所以我建议使用类似于快速排序分区的分区 他只要求只使
  • 从远程数据库检索数据

    有人可以向我解释一下从远程数据库检索数据的过程吗 我了解如何将数据从 sqlite 解析到 iPhone 应用程序 但远程数据库似乎更复杂 我尝试做研究 但是我对网络服务 云和其他我不熟悉的词感到困惑 到目前为止 我认为我需要使用 JSON
  • HDFS 对 DC/OS 中机器重启的弹性

    我已在由 10 台 Core OS 机器 3 个主节点 7 个代理节点 组成的 DCOS 集群上安装了 Universe 中的 HDFS 我的 HA HDFS 配置有 2 个名称节点 3 个日志节点和 5 个数据节点 现在 我的问题是 HD
  • R 中 visNetwork 中的边组和选择

    有没有办法创建网络边缘组 我可以选择一组显示带有节点的选定边的边吗 手动使用箭头上的不同颜色和标题进行可视化 这适用于该页面中间显示的教程等节点 https datastorm open github io visNetwork optio
  • mongodb 游标何时过期

    我对 mongodb 不了解 我只是想问是否有可能 如果可能 如何做到这一点 我的问题是我们如何知道游标何时过期 有没有用于此目的的API 如果有任何意见和建议 我将不胜感激 此致 来自 MongoDB 文档 默认情况下 当客户端用完游标中
  • 为在 WooCommerce 中显示自定义产品价格的功能启用回价后缀

    我在用 在 Woocommerce 中为登录用户启用销售价格 为未登录用户启用常规价格 https stackoverflow com questions 49706432 enable sale price for logged user
  • 尝试从类继承时出现错误:“x 实例没有属性 y”

    我无法真正理解我做错了什么 因为当我在 小规模 中尝试它并且它在那里工作时 我有一个名为Play 我是这样的 class Play def init self file open home trufa Desktop test r self
  • iOS8 和 Xcode - 如何分发具有 cocoa pod 依赖项的嵌入式框架

    我需要创建一个compiled分发给第三方的框架 我在用cocoa pods处理my依赖关系 为了实现这一目标 创建动态链接框架似乎是最好的选择 但我不确定并且愿意接受建议 我采取的步骤是 我创建了一个包装项目来包含框架目标 在包装器项目中
  • 更新查询 PHP MySQL [重复]

    这个问题在这里已经有答案了 谁能帮助我理解为什么这个更新查询没有更新我数据库中的字段 我的 php 页面中有这样的内容 用于从数据库中检索当前值
  • 自定义透明对话框(windowBackground不存在?)

    我正在尝试创建一个具有半透明背景的自定义对话框 我设法通过代码让它工作 getWindow setBackgroundDrawableResource R color bg tran 其中 bg tran A0000000 不过 我宁愿将其
  • 在 data.frame() 中移动列而不重新输入

    是否有一种方法可以将列从 data frame 中的一个位置移动到下一个位置 无需键入全新的 data frame 例如 a lt b lt c lt d lt e lt f lt g lt 1 100 df lt data frame a
  • 图像特定区域的平滑[重复]

    这个问题在这里已经有答案了 可能的重复 OpenCV中如何设置ROI https stackoverflow com questions 8206466 how to set roi in opencv 我试图在图像上使用平滑 模糊滤镜 但
  • C# 关键字作为变量

    在 VB NET 中 您可以用方括号将变量名称括起来 并使用关键字作为变量名称 如下所示 Dim goto As String 有 C 相当于这样做吗 string string
  • Django 属性错误:模块“appname”没有属性模型

    我知道我的问题可能涉及相互 循环导入 并且我在发布之前确实进行了搜索 我发现当前解决我的问题的唯一解决方案是将导入移至其中一个文件的末尾 就在实际使用导入的函数之前 但我也读到这是非常不推荐的 推荐的解决方案 只需执行以下操作 in A p