** ОБНОВЛЕНО ** Объект 'NoneType' не имеет атрибута 'day'
Я не знаю, где моя ошибка, но Django 1.2.1 дает эту ошибку: объект "NoneType" не имеет атрибута "день", когда я пытаюсь сохранить форму в области администратора
models.py
from django.db import models
from django.contrib.auth.models import User
class Editorial(models.Model):
titulo = models.CharField(max_length=250,help_text='Titulo del editorial')
editorial = models.TextField(help_text='Editorial')
slug = models.SlugField(unique_for_date='pub_date')
autor = models.ForeignKey(User)
pub_date = models.DateTimeField(auto_now_add=True)
activa = models.BooleanField(verbose_name="Activa")
enable_comments = models.BooleanField(verbose_name="Aceptar Comentarios",default=False)
editorial_html = models.TextField(editable=False,blank=True)
def __unicode__(self):
return unicode(self.titulo)
def get_absolute_url(self):
return "/editorial/%s/%s/" % (self.pub_date.strftime("%Y/%b/%d").lower(), self.slug)
class Meta:
ordering=['-pub_date']
verbose_name_plural ='Editoriales'
def save(self,force_insert=False, force_update=False):
from markdown import markdown
if self.editorial:
self.editorial_html = markdown(self.editorial)
super(Editorial,self).save(force_insert,force_update)
Я не знаю, почему эта ошибка,
ЗАВЕРШЕННАЯ ОШИБКА:
Traceback:
File "C:\wamp\bin\Python26\lib\site-packages\django\core\handlers\base.py" in get_response
100. response = callback(request, *callback_args, **callback_kwargs)
File "C:\wamp\bin\Python26\lib\site-packages\django\contrib\admin\options.py" in wrapper
239. return self.admin_site.admin_view(view)(*args, **kwargs)
File "C:\wamp\bin\Python26\lib\site-packages\django\utils\decorators.py" in _wrapped_view
76. response = view_func(request, *args, **kwargs)
File "C:\wamp\bin\Python26\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func
69. response = view_func(request, *args, **kwargs)
File "C:\wamp\bin\Python26\lib\site-packages\django\contrib\admin\sites.py" in inner
190. return view(request, *args, **kwargs)
File "C:\wamp\bin\Python26\lib\site-packages\django\utils\decorators.py" in _wrapper
21. return decorator(bound_func)(*args, **kwargs)
File "C:\wamp\bin\Python26\lib\site-packages\django\utils\decorators.py" in _wrapped_view
76. response = view_func(request, *args, **kwargs)
File "C:\wamp\bin\Python26\lib\site-packages\django\utils\decorators.py" in bound_func
17. return func(self, *args2, **kwargs2)
File "C:\wamp\bin\Python26\lib\site-packages\django\db\transaction.py" in _commit_on_success
299. res = func(*args, **kw)
File "C:\wamp\bin\Python26\lib\site-packages\django\contrib\admin\options.py" in add_view
777. if form.is_valid():
File "C:\wamp\bin\Python26\lib\site-packages\django\forms\forms.py" in is_valid
121. return self.is_bound and not bool(self.errors)
File "C:\wamp\bin\Python26\lib\site-packages\django\forms\forms.py" in _get_errors
112. self.full_clean()
File "C:\wamp\bin\Python26\lib\site-packages\django\forms\forms.py" in full_clean
269. self._post_clean()
File "C:\wamp\bin\Python26\lib\site-packages\django\forms\models.py" in _post_clean
345. self.validate_unique()
File "C:\wamp\bin\Python26\lib\site-packages\django\forms\models.py" in validate_unique
354. self.instance.validate_unique(exclude=exclude)
File "C:\wamp\bin\Python26\lib\site-packages\django\db\models\base.py" in validate_unique
695. date_errors = self._perform_date_checks(date_checks)
File "C:\wamp\bin\Python26\lib\site-packages\django\db\models\base.py" in _perform_date_checks
802. lookup_kwargs['%s__day' % unique_for] = date.day
Exception Type: AttributeError at /admin/editoriales/editorial/add/
Exception Value: 'NoneType' object has no attribute 'day'
UPDATE
MODEL ADMIN:
from django.contrib import admin
from myproject.editoriales.models import Editorial
class EditorialAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug': ['titulo']}
list_display = ('titulo', 'pub_date', 'autor', 'activa')
list_per_page = 10
date_hierarchy = 'pub_date'
search_fields = ['titulo', 'editorial', ]
list_filter = ('pub_date', 'activa', 'autor',)
class Media:
js = ('/public/tiny_mce/tiny_mce.js',
'/public/tiny_mce/textareas.js',
)
admin.site.register(Editorial, EditorialAdmin)
спасибо ребятам
извините за мой английский
Я думаю, что проблема заключается в том, что уникальная_for_date = 'pub_date' вместе с pub_date, которая является auto_now_add = True.
auto_now_add работает только после, сохранение выполнено. unique_for_date отмечен до сохранения. , когда проверка выполнена, поле pub_date по-прежнему отсутствует, поэтому проверка завершается неудачей.
предлагаемые решения:
- Измените slug от unique_for_date до уникального (но тогда у вас не может быть 2 статьи с одинаковыми пулями на разные даты).
измените pub_date с auto_now_add на default = datetime.date.today(но тогда пользователи могут вручную изменить это значение).
то же самое, что и 2, но также использовать editable = False.
Попытка замены:
def save(self,force_insert=False, force_update=False):
from markdown import markdown
if self.editorial:
self.editorial_html = markdown(self.editorial)
super(Editorial,self).save(force_insert,force_update)
с:
def save(self, *args, **kwargs):
from markdown import markdown
if self.editorial:
self.editorial_html = markdown(self.editorial)
super(Editorial,self).save(*args, **kwargs)
Обратите внимание на разницу в последней строке. Вы вызывали функцию сохранения с двумя позиционными аргументами с значениями False
(они, вероятно, должны были иметь аргументы ключевого слова, и в этом случае это выглядело бы как super(Editorial,self).save(force_insert=force_insert,force_update=force_update)
)
, а также ограничение возможных параметров, которые могут быть переданы в метод сохранения Django, который вы переопределяете. Второй фрагмент кода выше решает обе проблемы.
- Вопросы
- Django-admin
- ** ОБНОВЛЕНО ** Объект 'NoneType' не имеет атрибута 'day'