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”没有属性模型 的相关文章

  • Pandas apply 与 np.vectorize 从现有列创建新列的性能

    我正在使用 Pandas 数据框 并希望创建一个新列作为现有列的函数 我还没有看到关于之间速度差异的很好的讨论df apply and np vectorize 所以我想我会在这里问 熊猫apply 功能很慢 根据我的测量 在一些实验中如下
  • PyList_SetItem 与 PyList_SETITEM

    据我所知 PyList SetItem 和 PyList SETITEM 之间的区别在于 PyList SetItem 会降低它覆盖的列表项的引用计数 而 PyList SETITEM 不会 我有什么理由不应该一直使用 PyList Set
  • 具有多处理功能的 Python 代码无法在 Windows 上运行

    以下简单的绝对初学者代码在 Ubuntu 14 04 Python 2 7 6 和 Cygwin Python 2 7 8 上运行 100 但在 Windows 64 位 Python 2 7 8 上挂起 我使用另一个片段观察到了同样的情况
  • Python Nose 导入错误

    我似乎无法理解鼻子测试框架 https nose readthedocs org en latest 识别文件结构中测试脚本下方的模块 我已经设置了演示该问题的最简单的示例 下面我会解释一下 这是包文件结构 init py foo py t
  • DataFrame 在函数内部修改

    我面临一个我以前从未观察到的函数内数据帧修改的问题 有没有一种方法可以处理这个问题 以便初始数据帧不被修改 def test df df tt np nan return df dff pd DataFrame data 现在 当我打印时d
  • Python 遍历目录树的方法是什么?

    我觉得分配文件和文件夹并执行 item 部分有点黑客 有什么建议么 我正在使用Python 3 2 from os import from os path import def dir contents path contents list
  • 为什么我的scoped_session 引发 AttributeError: 'Session' object has no attribute 'remove'

    我正在尝试建立一个系统 将数据库操作优雅地推迟到单独的线程 以避免在 Twisted 回调期间发生阻塞 到目前为止 这是我的方法 from contextlib import contextmanager from sqlalchemy i
  • Pyspark 数据框逐行空列列表

    我有一个 Spark 数据框 我想创建一个新列 其中包含每行中具有 null 的列名称 例如 原始数据框是 col 1 col 2 col 3 62 45 null 62 49 56 45 null null null null null
  • Python 正则表达式部分匹配或“hitEnd”

    我正在编写一个扫描器 因此我将任意字符串与正则表达式规则列表进行匹配 如果我可以模拟 Java hitEnd 功能 不仅知道正则表达式何时不匹配 还知道何时匹配 这将非常有用 can t匹配 当正则表达式匹配器在决定拒绝输入之前到达输入末尾
  • 为 Networkx 图添加标题?

    我希望我的代码创建一个带有标题的图 使用下面的代码 可以创建绘图 但没有标题 有人可以告诉我我做错了什么吗 import pandas as pd import networkx as nx from networkx algorithms
  • 如何使用 Pandas 将巨大的 CSV 转换为 SQLite?

    我有一个巨大的表 大约 60 GB 采用存档的 CSV 文件形式 我想将其转换为 SQLite 文件 我现在所做的事情如下 import pandas import sqlite3 cnx sqlite3 connect db sqlite
  • 错误:无法访问文件“$libdir/plpython2”:没有这样的文件或目录

    我正在运行 postgresql 9 4 PostgreSQL 9 4 4 on x86 64 unknown linux gnu compiled by gcc GCC 4 1 2 20070626 Red Hat 4 1 2 14 64
  • 如何修复错误“AttributeError:‘模块’对象在 python3 中没有属性‘客户端’?

    以下是我的代码 import http h1 http client HTTPConnection www bing com 我认为没问题 但是 python 给了我以下错误 AttributeError 模块 对象没有属性 客户端 我想知
  • 如何对这个 Flask 应用程序进行单元测试?

    我有一个 Flask 应用程序 它使用 Flask Restless 来提供 API 我刚刚写了一些身份验证来检查 如果消费者主机被识别 该请求包含一个哈希值 通过加密 POST 的请求内容和 GET 的 URL 以及秘密 API 密钥来计
  • 从 IMDbPy 结果中的片目中获取电影 ID

    我正在尝试创建一个数据集 允许我根据 Python IMDb API 中的演员 ID 和电影 ID 加入演员和电影 现在 我正在尝试从演员的电影作品中提取电影 ID 列表 但无法做到 例如 我知道 Rodney Dangerfield 在
  • smooth_idf 是多余的吗?

    The scikit learn 文档 http scikit learn org stable modules generated sklearn feature extraction text TfidfTransformer html
  • 如何在C++中列出Python模块的所有函数名称?

    我有一个 C 程序 我想导入一个 Python 模块并列出该模块中的所有函数名称 我该怎么做 我使用以下代码从模块中获取字典 PyDictObject pDict PyDictObject PyModule GetDict pModule
  • 如何强制 Y 轴仅使用整数

    我正在使用 matplotlib pyplot 模块绘制直方图 我想知道如何强制 y 轴标签仅显示整数 例如 0 1 2 3 等 而不显示小数 例如 0 0 5 1 1 5 2 等 我正在查看指导说明并怀疑答案就在附近matplotlib
  • Jupyter Notebook:没有名为 pandas 的模块

    我搜索了其他问题 但没有找到任何有帮助的内容 大多数只是建议您使用 conda 或 pip 安装 pandas 在我的 jupyter 笔记本中 我试图导入 pandas import pandas as pd 但我收到以下错误 Modul
  • 在Python中从日期时间中减去秒

    我有一个 int 变量 它实际上是秒 让我们调用这个秒数X 我需要得到当前日期和时间 以日期时间格式 减去的结果X秒 Example If X是 65 当前日期是2014 06 03 15 45 00 那么我需要得到结果2014 06 03

随机推荐

  • 具有嵌套模型类的 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