Форум сайта python.su
Привет, пытаюсь освоить Django. Создал проект по книжке, но не могу победить ошибку:
TemplateSyntaxError at /admin/books/book/
Caught AttributeError while rendering: 'str' object has no attribute 'year'
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/books/book/
Django Version: 1.2.5
Exception Type: TemplateSyntaxError
Exception Value:
Caught AttributeError while rendering: 'str' object has no attribute 'year'
Exception Location: C:\Python27\lib\site-packages\django-1.2.5-py2.7.egg\django\contrib\admin\templatetags\admin_list.py in date_hierarchy, line 282
Python Executable: C:\Python27\python.exe
Python Version: 2.7.1
Python Path: ['D:\\WORK\\DJANGO\\mysite', 'C:\\Python27\\lib\\site-packages\\genshi-0.6-py2.7-win32.egg', 'C:\\Python27\\lib\\site-packages\\xlrd-0.7.1-py2.7-win32.egg', 'C:\\Python27\\lib\\site-packages\\xlwt-0.7.2-py2.7-win32.egg', 'C:\\Python27\\lib\\site-packages\\xlutils-1.4.1-py2.7-win32.egg', 'C:\\Python27\\lib\\site-packages\\errorhandler-1.1.1-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\pip-0.8.2-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\pyside-1.0.0qt472-py2.7-win32.egg', 'C:\\Python27\\lib\\site-packages\\rdflib-3.0.0-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\pycim-14.15.2-py2.7-win32.egg', 'C:\\Python27\\lib\\site-packages\\cim-14.12a1-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\pylon-0.4.4-py2.7-win32.egg', 'C:\\Python27\\lib\\site-packages\\simplejson-2.1.3-py2.7-win32.egg', 'C:\\Python27\\lib\\site-packages\\sparqlwrapper-1.4.2-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\ipython-0.10.1-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\pysnmp-4.1.15a-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\pycrypto-2.3-py2.7-win32.egg', 'C:\\Python27\\lib\\site-packages\\pyasn1-0.0.13a-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\django-1.2.5-py2.7.egg', 'C:\\Program Files\\JetBrains\\PyCharm 1.1.1\\helpers', 'D:\\WORK\\DJANGO\\mysite', 'D:\\WORK\\DJANGO', 'C:\\WINDOWS\\system32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages']
Server time: Чтв, 17 Мар 2011 14:17:10 +0300
Template error
In template c:\python27\lib\site-packages\django-1.2.5-py2.7.egg\django\contrib\admin\templates\admin\change_list.html, error at line 77
Caught AttributeError while rendering: 'str' object has no attribute 'year'
67 {% endif %}
68 {% endblock %}
69 {% if cl.formset.errors %}
70 <p class="errornote">
71 {% blocktrans count cl.formset.errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
72 </p>
73 {{ cl.formset.non_form_errors }}
74 {% endif %}
75 <div class="module{% if cl.has_filters %} filtered{% endif %}" id="changelist">
76 {% block search %}{% search_form cl %}{% endblock %}
77 {% block date_hierarchy %}{% date_hierarchy cl %}{% endblock %}
78
79 {% block filters %}
80 {% if cl.has_filters %}
81 <div id="changelist-filter">
82 <h2>{% trans 'Filter' %}</h2>
83 {% for spec in cl.filter_specs %}{% admin_list_filter cl spec %}{% endfor %}
84 </div>
85 {% endif %}
86 {% endblock %}
Отредактировано (Март 17, 2011 13:41:44)
Офлайн
Кагбэ тут модельку лучше показать…
Скорее всего что-то не то в методе __unicode__() написали.
Офлайн
Модель:
from django.db import models
class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=30, blank=True)
country = models.CharField(max_length=50)
website = models.URLField(blank=True)
def __unicode__(self):
return self.name
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField(blank=True, verbose_name='e-mail')
def __unicode__(self):
return u'%s %s' % (self.first_name, self.last_name)
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
def __unicode__(self):
return self.title
Офлайн
Надо смотреть на декларацию ModelAdmin
Офлайн
Там тоже вроде ничего криминального:
from django.contrib import admin
from mysite.books.models import Publisher, Author, Book
class AuthorAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')
search_fields = ('first_name', 'last_name')
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
filter_horizontal = ('authors',)
class PublisherAdmin(admin.ModelAdmin):
list_display = ('name', 'city', 'website')
search_fields = ('name',)
admin.site.register(Publisher, PublisherAdmin)
admin.site.register(Author, AuthorAdmin)
admin.site.register(Book, BookAdmin)
Офлайн
Александр КошелевВы правы, Александр. Ошибка возникала из-за этой строчки:
Надо смотреть на декларацию ModelAdmin
date_hierarchy = 'publication_date'
Офлайн
Привет! У меня точно такая же ошибка. Не могу ее победить… пока. Если убрать date_hierarchy = ‘publication_date’, то ошибка исчезает.
Но как исправить ее, не убирая эту ценную строчку кода? :)
Офлайн
Ура! Нашел решение проблемы! Как вы помните, у меня возникала ошибка при добавлении записи date_hierarchy = ‘publication date’. Вот ошибка: “Caught AttributeError while rendering: ‘unicode’ object has no attribute ‘year’.”
Причина ошибки: Неверно задано свойство поля ‘publication_date’. Необходимо, чтобы оно было date, а не varchar(255), как было у меня.
Чтобы задать это для MySQL выполните команду:
ALTER TABLE books_book MODIFY books_book.publication_date date NULL;
Офлайн