当我尝试删除具有相关评论的帖子时,它会返回提到的 TypeError。当它没有注释时,一切都会按预期进行。
型号
class Post(models.Model):
title = models.CharField(max_length=160)
category = models.ForeignKey(Category, null=True)
body = models.TextField()
description = models.TextField(max_length=150, null=True)
...
def __str__(self):
return self.title
def save(self, **kwargs):
slug_str = "%s %s" % (self.category, self.title)
unique_slugify(self, slug_str)
super(Post, self).save(**kwargs)
class Comment(models.Model):
post = models.ForeignKey(Post)
body = models.TextField(max_length=1000)
created = models.DateTimeField(auto_now_add=True)
creator = models.ForeignKey(User, blank=True, null=True)
...
def __str__(self):
return self.post
def save(self, **kwargs):
slug_str = "%s %s" % (self.created, self.post)
unique_slugify(self, slug_str)
super(Comment, self).save(**kwargs)
回溯
> File
> "/home/lucascarder/webapps/decidiu/lib/python3.4/Django-1.7.4-py3.4.egg/django/core/handlers/base.py"
> in get_response
> 111. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/lucascarder/webapps/decidiu/lib/python3.4/Django-1.7.4-py3.4.egg/django/contrib/admin/options.py"
> in wrapper
> 583. return self.admin_site.admin_view(view)(*args, **kwargs) File "/home/lucascarder/webapps/decidiu/lib/python3.4/Django-1.7.4-py3.4.egg/django/utils/decorators.py"
> in _wrapped_view
> 105. response = view_func(request, *args, **kwargs) File "/home/lucascarder/webapps/decidiu/lib/python3.4/Django-1.7.4-py3.4.egg/django/views/decorators/cache.py"
> in _wrapped_view_func
> 52. response = view_func(request, *args, **kwargs) File "/home/lucascarder/webapps/decidiu/lib/python3.4/Django-1.7.4-py3.4.egg/django/contrib/admin/sites.py"
> in inner
> 206. return view(request, *args, **kwargs) File "/home/lucascarder/webapps/decidiu/lib/python3.4/Django-1.7.4-py3.4.egg/django/utils/decorators.py"
> in _wrapper
> 29. return bound_func(*args, **kwargs) File "/home/lucascarder/webapps/decidiu/lib/python3.4/Django-1.7.4-py3.4.egg/django/utils/decorators.py"
> in _wrapped_view
> 105. response = view_func(request, *args, **kwargs) File "/home/lucascarder/webapps/decidiu/lib/python3.4/Django-1.7.4-py3.4.egg/django/utils/decorators.py"
> in bound_func
> 25. return func.__get__(self, type(self))(*args2, **kwargs2) File "/home/lucascarder/webapps/decidiu/lib/python3.4/Django-1.7.4-py3.4.egg/django/contrib/admin/options.py"
> in changelist_view
> 1511. response = self.response_action(request, queryset=cl.get_queryset(request)) File
> "/home/lucascarder/webapps/decidiu/lib/python3.4/Django-1.7.4-py3.4.egg/django/contrib/admin/options.py"
> in response_action
> 1282. response = func(self, request, queryset) File "/home/lucascarder/webapps/decidiu/lib/python3.4/Django-1.7.4-py3.4.egg/django/contrib/admin/actions.py"
> in delete_selected
> 37. queryset, opts, request.user, modeladmin.admin_site, using) File
> "/home/lucascarder/webapps/decidiu/lib/python3.4/Django-1.7.4-py3.4.egg/django/contrib/admin/utils.py"
> in get_deleted_objects
> 153. to_delete = collector.nested(format_callback) File "/home/lucascarder/webapps/decidiu/lib/python3.4/Django-1.7.4-py3.4.egg/django/contrib/admin/utils.py"
> in nested
> 211. roots.extend(self._nested(root, seen, format_callback)) File
> "/home/lucascarder/webapps/decidiu/lib/python3.4/Django-1.7.4-py3.4.egg/django/contrib/admin/utils.py"
> in _nested
> 194. children.extend(self._nested(child, seen, format_callback)) File
> "/home/lucascarder/webapps/decidiu/lib/python3.4/Django-1.7.4-py3.4.egg/django/contrib/admin/utils.py"
> in _nested
> 196. ret = [format_callback(obj)] File "/home/lucascarder/webapps/decidiu/lib/python3.4/Django-1.7.4-py3.4.egg/django/contrib/admin/utils.py"
> in format_callback
> 126. force_text(obj)) File "/home/lucascarder/webapps/decidiu/lib/python3.4/Django-1.7.4-py3.4.egg/django/utils/encoding.py"
> in force_text
> 83. s = six.text_type(s)
>
> Exception Type: TypeError at /admin/blog/post/ Exception Value:
> __str__ returned non-string (type Post)
看起来和这张8年前的票一模一样,因为不可复制而被关闭:https://code.djangoproject.com/ticket/5233#no1
谢谢。
最佳答案
看起来 Comment.__str__()
返回 self.post
,它是一个 ForeignKey
对象,而不是 str
ing。
关于python - 尝试删除有评论的帖子时收到 "__str__ returned non-string (type Post)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29552749/