1

我是 Django 的新手,我正在开发一个应用程序,但我陷入了这个错误。首先,我想为我的英语道歉,因为这不是我的第一语言,然后我希望我在正确的地方寻求帮助。

我正在开发一个关于文章发表的网站。“Publication”页面返回模型实例的列表——在我的例子中是数据库中的所有出版物。

我要做的是为我的模型的每个实例分配一个 url,以便用户可以单击它并查看填充了该实例的其他相关信息的页面。

为此,我在模板中使用 get_absolute_url,在视图中使用 DetailView。所有实例的列表工作正常,但是当我单击每个实例时,我运行错误 'NoneType' object has no attribute '_default_manager' 。我已经用谷歌搜索并尝试在这里和那里遵循一些指导方针,并尝试在 Django doc 中找到解决方案无法找出解决方案......

这是我的代码:

模型.py

class Publications(MPTTModel):
    code = models.CharField(max_length=50)
    title = models.CharField(max_length=150)
    date = models.DateField(null=True)
    magazine = models.CharField(max_length=50)
    country = models.CharField(max_length=30)
    slug = models.SlugField(max_length=150)
    img01 = models.ImageField(upload_to="photo", blank=True, null=True)
    link = models.URLField(max_length=200, blank=True, null=True)
    template = models.ForeignKey("Template", related_name="publications", null=True, blank=True)
    parent = models.ForeignKey('self', null=True, blank=True, related_name='children')
    control_field = models.CharField(max_length=15)
    class Meta:
        verbose_name_plural = "Publications"
    def __unicode__(self):
        return self.title
    def get_absolute_url(self):
        return reverse('mag-publication',args=(self.slug,))

出版物.html

{% load mptt_tags %}
{% load sito_tags %}
{% full_tree_for_model myApp.Publications as publications %}
{% for publications,structure in publications|tree_info %}  
    {% if publications.img01 %}
    <div id="title_publication_container">
        <a href="{{ publications.get_absolute_url }}">{{ publications.magazine }}</a>
    </div>                      
    {% else %}                          
        ....    
    {% endif %} 
{% endfor %}

网址.py

urlpatterns = patterns('',  
url(r'^(?P<id_page>\d+)/(?P<slug>[\w-]+)/$', pages,),
url(r'^(?P<id_page>\d+)/(?P<slug_page>[\w-]+)/(?P<id>\d+)/(?P<slug>[\w-]+)/$', projects,),
url(r'^mag-publication/(?P<slug>[\w-]+)/$', PublicationDetailView.as_view() , name='mag-publication'),

)

视图.py

class PublicationView(object):
    queryset = Publications.objects.all()

class PublicationListView(PublicationView, ListView):
    paginate_by = 20

class PublicationDetailView(PublicationView, DetailView):
    slug_field = 'slug'

该错误向我显示了此调试信息:

AttributeError at /6/publications/*title_publication*/
**'NoneType' object has no attribute '_default_manager'**

Request Method:     GET
Request URL:    .../6/publications/*title_publication*/
Django Version:     1.5.4
Exception Type:     AttributeError
Exception Value:    'NoneType' object has no attribute '_default_manager'
Exception Location:     /home/gabriele/virtual_envs/virt2/lib/python2.7/site-packages/feincms/views/cbv/views.py in get_object, line 20
Python Executable:  /home/gabriele/virtual_envs/virt2/bin/python

正如它在“异常位置”中所说的那样,问题可能与 feincms 有关,但是在我尝试处理模型实例之后,一切都出现了。

谢谢您的帮助。

4

4 回答 4

1

您可能没有按照文档feincms.module.page添加到您的文件中。如果您遵循回溯,错误会出现在get_object()中,它会尝试访问页面模型。INSTALLED_APPS

您使用的是旧版 FeinCMS 吗?在这种情况下,较新的版本会发出警告。

于 2014-08-20T12:33:18.273 回答
0

好吧,我不知道 feincms 但在您看来,您有:

class PublicationView(object):
    queryset = Publications.objects.all()

class PublicationListView(PublicationView, ListView):
    paginate_by = 20

class PublicationDetailView(PublicationView, DetailView):
    slug_field = 'slug'

首先,如果他的名字已经是“slug”,则不需要设置 slug 字段。

还有一件事:

您从 PublicationDetailView 中的 PublicationView 继承,但 DetailView 需要一个对象,只需在您的 url 文件中尝试这样:

url(r'^mag-publication/(?P<slug>[\w-]+)/$', DetailView.as_view(model=Publications) , name='mag-publication')

当然不要忘记将 DetailView 和 Publications 模型导入您的 url 文件。

编辑 20/08/2014

在您的get_absolute_url方法中,您使用:

return reverse('mag-publication',args=({'slug':self.slug}))

如果你想使用 dict 作为参数,你必须使用:

return reverse('mag-publication',kwargs={'slug':self.slug})

如果你想使用 args 你必须这样做:

return reverse('mag-publication',args=(self.slug,))
于 2014-08-19T17:05:58.630 回答
0

我解决了部分问题。我使用了 get_absolute_url 和 DetailView 的组合。我可以在publication.html 中完美地看到出版物的列表,但是当我单击其中一个时,应用程序会向我显示 - 在publications_detail.html 中 - 模型的所有实例的详细信息,而不是只有一个。从管理员“现场查看”的出版物中它可以工作,但存在同样的问题,将所有实例一起显示给我。问题是如何只捕获一个实例。按照代码:

模型.py

class Publications(MPTTModel):
    title = models.CharField(max_length=150)
    slug = models.SlugField(max_length=150)
    img01 = models.ImageField(upload_to="photo", blank=True, null=True) 
    template = models.ForeignKey("Template", related_name="publications", null=True, blank=True)
    parent = models.ForeignKey('self', null=True, blank=True, related_name='children')
    control_field = models.CharField(max_length=15)
    class Meta:
        verbose_name_plural = "Publications"
    def __unicode__(self):
        return self.title
    def get_absolute_url(self):
        return reverse('mag-publication',args=(self.slug,))

视图.py

class PublicationsDetail(DetailView): 
    queryset = Publications.objects.all() 
    template_name = 'website/publications_detail.html' 

网址.py

url(r'^mag-publication/(?P<slug>[\w-]+)/$', PublicationsDetail.as_view() 

Publications_detail.html

{% load mptt_tags %}
{% load sito_tags %}
{% full_tree_for_model napeApp.Publications as publications %}
{% for publications,structure in publications|tree_info %}  
    {% if publications.img01 %}
        <div id="title_publication_container">
        <a href="{{ publications.get_absolute_url }}">{{ publications.magazine     }}</a>
        </div>                      
    {% else %}
    ....        
    {% endif %} 
{% endfor %}
于 2014-08-24T13:17:48.860 回答
0

就我而言,我只是将 meta 重命名为 Meta 并解决了。也许它与敏感的大写类名称有关

于 2021-01-24T22:07:00.743 回答