python - 尝试删除有评论的帖子时收到 "__str__ returned non-string (type Post)"

标签 python django

当我尝试删除具有相关评论的帖子时,它会返回提到的 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 对象,而不是 string。

关于python - 尝试删除有评论的帖子时收到 "__str__ returned non-string (type Post)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29552749/

相关文章:

python - 绘制 TreeViewItem 展开按钮和兄弟/子线

python - 模型表单不是使用 django 模型表单自动生成的

python - 在给定的时间和分钟使用 crontab 时,周期性任务不起作用

python - 在 django-admin 中使用 django 将用户数据导出为 CSV

python - Django:根据预保存信号调整图像大小

python 3 : remove a substring between two delimiting char

python - 如何自定义 Django manage.py shell?

python - Django 模板 : How can I regroup a list of dictionaries by a nested property of each dictionary?

python-3.x - Django 将 isbn10 传递给 url

Python findall 使用正则表达式抓取 HTML 标签内的数据