Reputation: 6865
i dont know where is my error, but Django 1.2.1 is give this error: 'NoneType' object has no attribute 'day' when i try to save form from the Administrator Area
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)
i dont know why this error,
COMPLETED ERROR:
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)
thanks guys
sorry with my English
Upvotes: 2
Views: 3230
Reputation: 24823
I think the problem is having unique_for_date='pub_date' together with pub_date that is auto_now_add=True. auto_now_add works only after the save has been done. unique_for_date is checked before the save. when the checking is done, the pub_date field is still None, and so the check fails.
proposed solutions:
Upvotes: 2
Reputation: 3784
Trying replacing:
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)
with:
def save(self, *args, **kwargs):
from markdown import markdown
if self.editorial:
self.editorial_html = markdown(self.editorial)
super(Editorial,self).save(*args, **kwargs)
Note the difference in the last line. You were calling the save function with two positional arguments with False
values (they probably should have been keyword arguments in which case it would look like super(Editorial,self).save(force_insert=force_insert,force_update=force_update)
)
, as well as limiting the possible options that can be passed to Django's save method which you're overriding. The second code snippet above solves both problems.
Upvotes: 0