python - AttributeError:模块“django.db.models”没有属性“get_models”
问题描述
get_model()
为什么调用函数时会出现问题?这是我正在尝试做的事情:
@classmethod
def get_content_models(cls):
"""
Return all Package subclasses.
"""
is_content_model = lambda m: m is not Package and issubclass(m, Package)
return list(filter(is_content_model, models.get_models()))
这以前可以工作,但现在在更新到新的 Django 之后,它会抛出一个错误。如何解决?
更新
下面是我的模型
from django.db import models
class Package(BasePackage):
"""
A package in the package tree. This is the base class that custom content types
need to subclass.
"""
parent = models.ForeignKey("Package", blank=True, null=True, related_name="children", on_delete=models.CASCADE)
titles = models.CharField(editable=False, max_length=1000, null=True)
content_model = models.CharField(editable=False, max_length=50, null=True)
in_menus = MenusField(_("Show in menus"), blank=True, null=True)
login_required = models.BooleanField(_("Login required"), default=False,
help_text=_("If checked, only logged in users can view this Package"))
itinerary = models.ManyToManyField('ItineraryItem', through="PackageItinerary")
def __str__(self):
return self.title
def save(self, *args, **kwargs):
"""
Create the titles field using the titles up the parent chain
and set the initial value for ordering.
"""
if self.id is None:
self.content_model = self._meta.object_name.lower()
self.titles = self.title
super(Package, self).save(*args, **kwargs)
@classmethod
def get_content_models(cls):
"""
Return all Package subclasses.
"""
is_content_model = lambda m: m is not Package and issubclass(m, Package)
return list(filter(is_content_model, models.get_models()))
def get_content_model(self):
"""
Provies a generic method of retrieving the instance of the custom
content type's model for this Package.
"""
return getattr(self, self.content_model, None)
解决方案
这是一个 AttributeError,因为 models.get_model() 在 Dango 1.9 中被删除了。你应该使用 dango.apps.apps.get_model()。一些讨论是here和here
这是您现在使用它的方法。
from django.apps import apps
MyModel = apps.get_model('app name where the model is','name of the model you want to get from that app')
# Do your logic here with MyModel
但是,如果您只想获取模型,为什么不直接导入呢?您如何在下游使用代码?请注意,由于更改(从 1.9 开始),函数的属性可能已更改。因此,您可能需要考虑最新的模块和功能来实现您的结果(您以前得到的结果)。这意味着您需要做更多的工作来与更高版本的 Django 同步,但由于 get_model 的更改,您可能会遇到问题。总之,看看代码在做什么,并适应更新版本的 Django。
我不确定我是帮助你还是让你困惑。对不起,如果我后来做了。
最良好的祝愿。
推荐阅读
- r - 带有 Salesforce.com 的 RCurl 返回不支持的 SSL 协议版本
- javascript - 使用 getImageData 时出现跨域错误
- php - PHP - 显示所选产品的价格
- c# - 仅当请求被授权时,如何在 ASP.NET Core 中使用自定义中间件?
- wordpress - 不允许未经过滤的上传时如何将 PUB(或其他八位字节流)文件上传到 WordPress
- go - 为什么在 Debian 9 中编译的 golang 二进制文件无法在 Centos 7 中启动?
- css - 在 devtools 中设置相对位置但计算的位置是静态的
- java - 在 XML 标签中存储日期
- javascript - 如何获取 javascript 代码(纯 js)的父 div?
- java - Android Studio 模拟器问题我无法使用模拟器