【问题标题】:** UPDATED ** 'NoneType' object has no attribute 'day'** 已更新 ** 'NoneType' 对象没有属性 'day'
【发布时间】:2010-06-07 03:05:08
【问题描述】:

我不知道我的错误在哪里,但是 Django 1.2.1 给出了这个错误:当我尝试从管理员区域保存表单时,'NoneType' object has no attribute 'day'

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'

更新 模型管理员:

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)

谢谢大家

对不起我的英语

【问题讨论】:

  • 你能告诉我们完整的错误信息和堆栈跟踪吗?
  • 当然,我编辑并粘贴了完整的错误
  • 您使用的是 ModelAdmin 类吗?如果可以,可以发一下吗?
  • 这里是管理员模型。

标签: django django-models django-admin


【解决方案1】:

我认为问题在于 unique_for_date='pub_date' 以及 auto_now_add=True 的 pub_date。 auto_now_add 仅在保存完成后起作用。 unique_for_date 在保存之前检查。 检查完成后,pub_date 字段仍为None,因此检查失败

建议的解决方案:

  1. 将 slug 从 unique_for_date 更改为 unique(但您不能在不同日期有 2 篇具有相同 slug 的文章)。
  2. 将 pub_date 从 auto_now_add 更改为 default=datetime.date.today(但随后用户可以手动更改该值)。
  3. 与 2 相同,但也使用 editable=False。

【讨论】:

    【解决方案2】:

    尝试替换:

    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 保存方法的可能选项。上面的第二个代码 sn -p 解决了这两个问题。

    【讨论】:

      猜你喜欢
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 2014-07-05
      • 2018-05-05
      • 2013-02-11
      • 2018-12-01
      相关资源
      最近更新 更多