2014-02-28 41 views
0

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

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管理尝试比较ChildA和ChildB?我已经通过添加一个检查来解决问题,在比较文本长度之前确保它是正确的类型,但是想知道是否有其他人有这个问题,以及这里的结构是否有问题。更奇怪的是,这不会发生在所有父对象上。

感谢,马蒂亚斯

+0

奇怪.. !!你的类不是从模型继承的。 – Manjunath

+1

我认为页面试图从列表中消除双打,试图从列表中排除双打,或者用两种类型的实例排序列表,这导致调用__eq__。您应该更改__eq__,以便它可以与任何其他对象一起使用,而不仅仅是具有.text属性的对象。 – RemcoGerlich

+0

是的,我认为你是对的@RemcoGerlich,谢谢 –

回答

0

模型是不正确的

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) 
+0

我在我的问题中写了伪代码来解释这个问题,我的实际模型看起来不像这样。 –