1

私はDjangoが初めてで、アプリを開発していますが、このエラーで立ち往生しています。最初に私の母国語ではない英語について謝罪したいと思います。

私は記事の出版に関するウェブサイトを開発しています。ページ「パブリケーション」は、モデル インスタンスのリストを返します。私の場合は、データベース内のすべてのパブリケーションです。

私がやろうとしているのは、モデルの各インスタンスに URL を割り当てて、ユーザーがそれをクリックして、そのインスタンスの他の関連情報が取り込まれたページを表示できるようにすることです。

これを行うには、テンプレートで get_absolute_url を使用し、ビューで DetailView を使用しています。すべてのインスタンスのリストは正常に機能しますが、各インスタンスをクリックすると、エラー 'NoneType' object has no attribute '_default_manager' が実行されます。私はすでにグーグルで、あちこちでいくつかのガイドラインに従おうとし、Django docで解決策を見つけようとしましたが、解決策を見つけることができませんでした...

ここに私のコード:

models.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 %}

urls.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'),

)

view.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 ファイルにインポートすることを忘れないでください。

2014年8月20日編集

あなたのget_absolute_url方法では、次を使用します:

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

パラメータに dict を使用する場合は、次を使用する必要があります。

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

そして、引数を使用したい場合は、次のことを行う必要があります:

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