django中的AssertionError

时间:2013-12-19 15:39:51

标签: python django

我一直在把这头发拉出来,似乎有一个非常简单的解决方案,但是我太盲目了。 我已经从Django 1.4.3升级到Django 1.6,从那时起我在尝试使DateTimeField工作时出现断言错误。

这是我的模特

class Article(models.Model):
'''Article Model'''

banner = models.ImageField(verbose_name="Banner", null=True, blank=True, upload_to='ajax_uploads/banners', max_length=300)

title = models.CharField(
    verbose_name = _(u'Title'),
    help_text = _(u' '),
    max_length = 255
)
slug = models.SlugField(
    verbose_name = _(u'Slug'),
    help_text = _(u'Uri identifier.'),
    max_length = 255
)
content_markdown = models.TextField(
    verbose_name = _(u'Content (Markup)'),
    help_text = _(u' '),
)
content_markup = models.TextField(
    verbose_name = _(u'Content (Markup)'),
    help_text = _(u' '),
)
categories = models.ManyToManyField(
    Category,
    verbose_name = _(u'Categories'),
    help_text = _(u' '),
    null = True,
    blank = True
)
date_publish = models.DateTimeField(
    default=datetime.date.today,
    verbose_name = _(u'Publish Date'),
    help_text = _(u' ')
)

class Meta:
    app_label = _(u'blog')
    verbose_name = _(u'Article')
    verbose_name_plural = (u'Articles')
    ordering = ['-date_publish']

def save(self):
    self.content_markup = markdown(self.content_markdown, ['codehilite'])
    super(Article, self).save()

def __unicode__(self):
        return '%s' % (self.title,)

views.py:

def index(request):
'''News index'''
archive_dates = Article.objects.dates('date_publish','month', order='DESC')
categories = Category.objects.all()

page = request.GET.get('page')
article_queryset = Article.objects.all()
paginator = Paginator(article_queryset, 5)

try:
    articles = paginator.page(page)
except PageNotAnInteger:
    #If page requested is not an integer, deliver first page.
    articles = paginator.page(1)
except EmptyPage:
    #If page requested is out of range, deliver last page of results.
    articles = paginator.page(paginator.num_pages)

return render(
    request,
    'blog/article/index.html',
{
    'articles' : articles,
    'archive_dates' : archive_dates,
    'categories' : categories
}
)

和模板

                        <div class="8u skel-cell-important">
                                    {% for item in articles %}
                                            <!-- Content -->
                                                <article class="box is-post">
                                                    <a href="{% url "blog-article-single" slug=item.slug %}" class="image image-full"><img src="/media/{{ item.banner }}" alt="" /></a>
                                                    <header>
                                                        <h2><a href="{% url "blog-article-single" slug=item.slug %}">{{ item.title }}</a></h2>
                                                        <span class="byline">Published {{  item.date_publish|date:"j, M, Y" }}</span>
                                                    </header>
                                                    <p>
                                                        {{ item.content_markup|safe|slice:":250" }}...
                                                    </p>
                                                </article>
                                    {% endfor %}
                                        </div>

最后是错误追溯:

AssertionError at /blog/

'date_publish' is a DateTimeField, not a DateField.

Request Method:     GET
Request URL:    http://localhost:8000/blog/
Django Version:     1.6.1
Exception Type:     AssertionError
Exception Value:    

'date_publish' is a DateTimeField, not a DateField.

Exception Location:     /usr/local/lib/python2.7/dist-packages/django/db/models/sql/subqueries.py in _check_field, line 258
Python Executable:  /usr/bin/python2.7
Python Version:     2.7.3
Python Path:    

['/home/user/paperpxl',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-linux2',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PIL',
 '/usr/lib/python2.7/dist-packages/gst-0.10',
 '/usr/lib/python2.7/dist-packages/gtk-2.0',
 '/usr/lib/pymodules/python2.7',
 '/usr/lib/python2.7/dist-packages/ubuntu-sso-client',
 '/usr/lib/python2.7/dist-packages/ubuntuone-client',
 '/usr/lib/python2.7/dist-packages/ubuntuone-control-panel',
 '/usr/lib/python2.7/dist-packages/ubuntuone-couch',
 '/usr/lib/python2.7/dist-packages/ubuntuone-installer',
 '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol']

Server time:    Thu, 19 Dec 2013 15:28:43 +0000

任何形式的帮助都将不胜感激!

编辑:感谢您的帮助,我将回到发行说明再次阅读它们!我希望我能像你一样关注细节。

2 个答案:

答案 0 :(得分:8)

date_publishDateTimeField,而不是DateField。使用datetimes()方法代替dates()

Article.objects.datetimes('date_publish', 'month', order='DESC')

有关详细信息,请参阅1.6 release notes

答案 1 :(得分:1)

来自Django 1.6 release notes

  

QuerySet.dates()在DateTimeField上不再可用

     

QuerySet.dates()如果在DateTimeField上使用它会引发错误   时区支持处于活动状态。请改用QuerySet.datetimes()。

您使用dates DateTimeField模型在视图上使用date_publish