行动中失踪的Django 2.1模型管理员

时间:2018-08-16 03:18:44

标签: 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 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

试图获取我在管理员中创建的两个测试“需求”的简单ListView,却出现错误“需求没有属性“需求”。与“对象”相同,并且自定义对象也出现相同的错误。

# 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()

这是堆栈跟踪:

  

环境:

     

请求方法:GET请求URL:http://127.0.0.1:8000/fd/demand/

     

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',   [import_export']已安装的中间件:   ['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.XFrameOptionsMiddleware']

     

跟踪:

     

文件   “ C:\ Users \ me \ AppData \ Local \ Continuum \ Anaconda3 \ lib \ site-packages \ django \ core \ handlers \ exception.py”   在内部     34. response = get_response(request)

     

文件   “ C:\ Users \ me \ AppData \ Local \ Continuum \ Anaconda3 \ lib \ site-packages \ django \ core \ handlers \ base.py”   在_get_response中     126. response = self.process_exception_by_middleware(e,request)

     

文件   “ C:\ Users \ me \ AppData \ Local \ Continuum \ Anaconda3 \ lib \ site-packages \ django \ core \ handlers \ base.py”   在_get_response中     124. response = wrapd_callback(request,* callback_args,** callback_kwargs)

     

文件   “ C:\ Users \ me \ AppData \ Local \ Continuum \ Anaconda3 \ lib \ site-packages \ django \ views \ generic \ base.py”   鉴于     68. return self.dispatch(request,* args,** kwargs)

     

文件   “ C:\ Users \ me \ AppData \ Local \ Continuum \ Anaconda3 \ lib \ site-packages \ django \ views \ generic \ base.py”   在派遣中     88. return handler(请求,* args,** kwargs)

     

文件   “ C:\ Users \ me \ AppData \ Local \ Continuum \ Anaconda3 \ lib \ site-packages \ django \ views \ generic \ list.py”   在得到     142. self.object_list = self.get_queryset()

     

文件   在“ H:\ Workspace \ Django_Code \ Acejet_development \ forcedesign \ views.py”中   get_queryset     24. return Demand.demands.all()

     

异常类型:/ fd / demand /处的AttributeError异常值:类型   对象“需求”没有属性“需求”

如果我打印dir(Demand),我得到:

  

需求目录类别:['类别”,“ delattr ”,“ 字典”,“ 目录”,“ 文档”,“ eq ”,“ 格式”,“ ge ”,“ getattribute ”,“ gt ”,“ 哈希”,“ init ”,“ init_subclass ” ',' le ',' lt ','模块',   “ ne ”,“ ”,“ 减少”,“ reduce_ex ”,“ 重复< / strong>”,“ setattr ”,“ sizeof ”,“ str ”,“ 子类挂钩”,“ 弱引用”,“ _ allowed_methods”,“ as_view”,“ dispatch”,“ get”,“ http_method_names”,“ http_method_not_   允许”,“选项”,“发布”,“模板”]

因此,这向我表明,在Views.py中,从模型导入的需求实际上是基于类的视图类。我很困惑。

1 个答案:

答案 0 :(得分:0)

该死,有关在此处发布内容的一些事情使我头脑清醒。问题是在列表视图下方的Views.py中,我愚蠢地将Demand作为视图子类重载。因此,这一切都是很合理的。