Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AssertionError in django

Tags:

python

django

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.

like image 290
Hevlastka Avatar asked Dec 26 '22 16:12

Hevlastka


1 Answers

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.

like image 91
Alasdair Avatar answered Jan 01 '23 23:01

Alasdair