【问题标题】:Django Admin crash when trying to delete an object尝试删除对象时 Django Admin 崩溃
【发布时间】:2014-02-28 12:20:12
【问题描述】:

我有一个问题,每当我尝试删除一个对象时 Django Admin(我运行 Django 1.3)崩溃,并且管理员尝试显示哪些子对象会受到该操作的影响。我可以在终端中很好地删除对象。这是回溯:

File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response 
response = callback(request, *callback_args, **callback_kwargs) 
File "/usr/lib/python2.7/dist-packages/django/contrib/admin/options.py", line 307, in wrapper 
return self.admin_site.admin_view(view)(*args, **kwargs) 
File "/usr/lib/python2.7/dist-packages/django/utils/decorators.py", line 93, in _wrapped_view 
response = view_func(request, *args, **kwargs) 
File "/usr/lib/python2.7/dist-packages/django/views/decorators/cache.py", line 79, in _wrapped_view_func 
response = view_func(request, *args, **kwargs) 
File "/usr/lib/python2.7/dist-packages/django/contrib/admin/sites.py", line 197, in inner 
return view(request, *args, **kwargs) 
File "/usr/lib/python2.7/dist-packages/django/utils/decorators.py", line 28, in _wrapper 
return bound_func(*args, **kwargs) 
File "/usr/lib/python2.7/dist-packages/django/utils/decorators.py", line 93, in _wrapped_view 
response = view_func(request, *args, **kwargs) 
File "/usr/lib/python2.7/dist-packages/django/utils/decorators.py", line 24, in bound_func 
return func(self, *args2, **kwargs2) 
File "/usr/lib/python2.7/dist-packages/django/db/transaction.py", line 217, in inner 
res = func(*args, **kwargs) 
File "/usr/lib/python2.7/dist-packages/django/contrib/admin/options.py", line 1201, in delete_view 
[obj], opts, request.user, self.admin_site, using) 
File "/usr/lib/python2.7/dist-packages/django/contrib/admin/util.py", line 104, in get_deleted_objects 
to_delete = collector.nested(format_callback) 
File "/usr/lib/python2.7/dist-packages/django/contrib/admin/util.py", line 158, in nested 
roots.extend(self._nested(root, seen, format_callback)) 
File "/usr/lib/python2.7/dist-packages/django/contrib/admin/util.py", line 141, in _nested 
children.extend(self._nested(child, seen, format_callback)) 
File "/usr/lib/python2.7/dist-packages/django/contrib/admin/util.py", line 141, in _nested 
children.extend(self._nested(child, seen, format_callback)) 
File "/usr/lib/python2.7/dist-packages/django/contrib/admin/util.py", line 136, in _nested 
if obj in seen: 
File "/test.py", line 371, in __eq__ 
return len(self.text) == len(other.text) 

AttributeError: 'ChildB' object has no attribute 'text'

这是我的模型的样子:

class Parent(models.Model):  pass

class ChildA(models.Model):

    parent = models.ForeignKey(Parent)
    text = models.CharField()

    def __eq__(self, other):
        return len(self.text) == len(other.text)

class ChildB(models.Model):

    parent = models.ForeignKey(Parent)
    counter = models.IntegerField()

为什么 Django Admin 尝试比较 ChildA 和 ChildB?我通过在比较文本长度之前添加检查以确保它是正确的类型来解决这个问题,但想知道是否有其他人遇到过这个问题,以及我的结构是否存在问题。更奇怪的是,并非所有父对象都会发生这种情况。

谢谢,马蒂亚斯

【问题讨论】:

  • 奇怪..!!您的类不是从模型继承的。
  • 我认为该页面试图从列表中消除双精度值 试图从列表中消除双精度值,或者使用两种类型的实例对列表进行排序,这导致 eq 被调用。您应该更改 eq 以便它适用于任何其他对象,而不仅仅是具有 .text 属性的对象。
  • 是的,我认为你是对的@RemcoGerlich,谢谢

标签: python django django-admin


【解决方案1】:

模型不正确

from django.db import models
class Parent(models.Model):
    pass

class ChildA(models.Model):

    parent = models.ForeignKey(Parent)
    text = models.CharField()

    def __eq__(self, other):
        return len(self.text) == len(other.text)

class ChildB(models.Model):

    parent = models.ForeignKey(Parent)
    counter = models.IntegerField()

eq函数可能会导致这个错误,标记后重试

    def __eq__(self, other):
        return len(self.text) == len(other.text)

【讨论】:

  • 我在我的问题中写了伪代码只是为了说明问题,我的实际模型看起来不像这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
  • 2013-05-05
相关资源
最近更新 更多