Django 2.1模型管理器在运行中缺失
我已经定义了一个递归模型和一两个自定义管理器来包含一些有趣的树探索方法。我最近更新了Django 2.1和Python 3.6Django 2.1模型管理器在运行中缺失,django,django-models,django-views,Django,Django Models,Django Views,我已经定义了一个递归模型和一两个自定义管理器来包含一些有趣的树探索方法。我最近更新了Django 2.1和Python 3.6 # models.py class ParentManager(models.Manager): def get_queryset(self, pk=None): qs = super().get_queryset() def parent(parent_list): """ given a brainstorm ob
# models.py
class ParentManager(models.Manager):
def get_queryset(self, pk=None):
qs = super().get_queryset()
def parent(parent_list):
"""
given a brainstorm object that responds to something
(mainly if user clicks a header)
it returns the upstream brainstorm object it responds to
"""
if parent_list[0].responds_to:
parent_list.insert(0, qs.get(pk=parent_list[0].responds_to.pk))
parent(parent_list)
return parent_list
if pk:
parent_list = [qs.get(pk=pk), ]
parent(parent_list)
pk_list = [item.pk for item in parent_list]
return qs.filter(pk__in=pk_list)
else:
return qs
class Demand(models.Model):
name = models.CharField(max_length=150)
reference = models.CharField(max_length=150)
parent = models.ForeignKey('self', related_name='child', null=True, blank=True, on_delete=models.DO_NOTHING)
counterpart = models.ForeignKey('Supply', null=True, blank=True, on_delete=models.DO_NOTHING)
demands = models.Manager()
parents = ParentManager()
children = ChildManager()
def get_absolute_url(self):
_qs, pk_list = Demand.parents.get_queryset(pk=self.pk)
return 'demand/' + "-".join(pk_list)
def __str__(self):
return self.name
尝试获取我在管理中创建的两个测试“需求”的简单列表视图时,我得到了错误“需求没有属性”需求。“对象”也是如此,我的自定义对象也是如此
# views.py
class DemandList(ListView):
"""Django generic listview of available Demands within a project"""
template_name = 'forcedesign/ListView.html'
model = Demand
context_object_name = 'demand_list'
def get_queryset(self):
print("Dir of Demand class:", dir(Demand))
return Demand.demands.all()
这是stacktrace:
环境:
请求方法:获取请求URL:
Django版本:2.1 Python版本:3.6.0已安装的应用程序:
['polls.apps.PollsConfig'、'forcedesign.apps.ForcedesignConfig',
'django.contrib.admin','django.contrib.auth',
'django.contrib.contenttypes','django.contrib.sessions',
'django.contrib.messages'、'django.contrib.staticfiles',
“导入导出”]已安装的中间件:
['django.middleware.security.SecurityMiddleware',
“django.contrib.sessions.middleware.SessionMiddleware”,
'django.middleware.common.CommonMiddleware',
“django.middleware.csrf.CsrfViewMiddleware”,
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.xframeoptions中间件']
回溯:
文件
“C:\Users\me\AppData\Local\Continuum\Anaconda3\lib\site packages\django\core\handlers\exception.py”
在内部
34响应=获取响应(请求)
文件
“C:\Users\me\AppData\Local\Continuum\Anaconda3\lib\site packages\django\core\handlers\base.py”
你得到了什么回应
126response=self.process\u异常\u由\u中间件(e,请求)
文件
“C:\Users\me\AppData\Local\Continuum\Anaconda3\lib\site packages\django\core\handlers\base.py”
你得到了什么回应
124响应=包装的回调(请求,*回调参数,**回调参数)
文件
“C:\Users\me\AppData\Local\Continuum\Anaconda3\lib\site packages\django\views\generic\base.py”
鉴于
68返回自调度(请求,*args,**kwargs)
文件
“C:\Users\me\AppData\Local\Continuum\Anaconda3\lib\site packages\django\views\generic\base.py”
派遣
88返回处理程序(请求、*args、**kwargs)
文件
“C:\Users\me\AppData\Local\Continuum\Anaconda3\lib\site packages\django\views\generic\list.py”
进门
142self.object\u list=self.get\u queryset()
文件
中的“H:\Workspace\Django\u Code\Acejet\u development\forcedesign\views.py”
获取查询集
24返回Demand.demands.all()
异常类型:AttributeError at/fd/需求/异常值:类型
对象“需求”没有属性“需求”
如果我打印目录(按需),我会得到:
需求类别总监:[“class”、“delattr”、“dict”、“dir”、“doc”、“eq”、“格式”、“ge”、“getattribute”、“gt”、“哈希”、“init”、初始化子类、>le,“lt,“模块”,
“ne”、“new”、“reduce”、“reduce\u ex”、“repr”、“setattr”、“sizeof”、“子类钩子”、“weakref”、“weakref”、“允许的方法”、“as\u视图”、“获取”、“http\u方法”、“http\u名称”霍德诺_
允许的“,”选项“,”帖子“,”模板“]
这向我表明,在Views.py中,从模型导入的需求实际上是一个基于类的视图类。我太困惑了。该死,关于在这里发布的内容让我头脑清醒了。问题是,在列表视图下方的my Views.py中,作为视图子类,我愚蠢地重载了需求。所以这一切都很有意义