I've been pulling my hair out on this one and it seems like there is a really simple solution for it but I'm too blind to see it. I've upgraded from Django 1.4.3 to Django 1.6 and ever since then I get an assertion error while trying to get DateTimeField to work.
Here's my model
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
}
)
and template
<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>
and finally error traceback:
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
Any kind of help would be appreciated!
EDIT : Thanks for your help guys, I'm going back to the release notes to read through them again! I wish I had an eye for detail like you do.
date_publish
is a DateTimeField
, not a DateField
. Use the datetimes()
method instead of dates()
.
Article.objects.datetimes('date_publish', 'month', order='DESC')
See the 1.6 release notes for more details.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With