我試圖批量刪除Django網站的一個開發實例上的所有註釋,並且Django引發了一個AttributeException異常。AttributeError嘗試批量刪除Django中的項目時引發異常
我已經有了一個Python提示符下輸入以下代碼:
>>> from django.contrib.comments.models import Comment
>>> Comment.objects.all().delete()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/jeff/.virtualenvs/osl_main-website/lib/python2.6/site-packages/django/db/models/query.py", line 441, in delete
obj._collect_sub_objects(seen_objs)
File "/home/jeff/.virtualenvs/osl_main-website/lib/python2.6/site-packages/django/db/models/base.py", line 569, in _collect_sub_objects
sub_obj._collect_sub_objects(seen_objs, self, related.field.null)
File "/home/jeff/.virtualenvs/osl_main-website/lib/python2.6/site-packages/django/db/models/base.py", line 585, in _collect_sub_objects
delete_qs = rel_descriptor.delete_manager(self).all()
AttributeError: 'ReverseSingleRelatedObjectDescriptor' object has no attribute 'delete_manager'
我不知道,爲什麼delete語句不工作。任何人都可以幫助我,爲什麼這不工作,我能做些什麼來解決它?
關於我的模型的更多細節:
我有一個名爲OslComment
另一種模式,從Comment
繼承。我也有一個Vote
模型,指向OslComment
中的條目。
BaseCommentAbstractModel
class BaseCommentAbstractModel(models.Model):
"""
An abstract base class that any custom comment models probably should
subclass.
"""
# Content-object field
content_type = models.ForeignKey(ContentType,
verbose_name=_('content type'),
related_name="content_type_set_for_%(class)s")
object_pk = models.TextField(_('object ID'))
content_object = generic.GenericForeignKey(ct_field="content_type", fk_field="object_pk")
# Metadata about the comment
site = models.ForeignKey(Site)
評論
class Comment(BaseCommentAbstractModel):
"""
A user comment about some object.
"""
# Who posted this comment? If ``user`` is set then it was an authenticated
# user; otherwise at least user_name should have been set and the comment
# was posted by a non-authenticated user.
user = models.ForeignKey(User, verbose_name=_('user'),
blank=True, null=True, related_name="%(class)s_comments")
user_name = models.CharField(_("user's name"), max_length=50, blank=True)
user_email = models.EmailField(_("user's email address"), blank=True)
user_url = models.URLField(_("user's URL"), blank=True)
comment = models.TextField(_('comment'), max_length=COMMENT_MAX_LENGTH)
# Metadata about the comment
submit_date = models.DateTimeField(_('date/time submitted'), default=None)
ip_address = models.IPAddressField(_('IP address'), blank=True, null=True)
is_public = models.BooleanField(_('is public'), default=True,
help_text=_('Uncheck this box to make the comment effectively ' \
'disappear from the site.'))
is_removed = models.BooleanField(_('is removed'), default=False,
help_text=_('Check this box if the comment is inappropriate. ' \
'A "This comment has been removed" message will ' \
'be displayed instead.'))
OslComment
class OslComment(Comment):
parent_comment = models.ForeignKey(Comment, blank=True, null=True, related_name='parent_comment')
inline_to_object = models.BooleanField(default=False)
edit_timestamp = models.DateTimeField()
transformed_comment = models.TextField(editable=False)
is_deleted_by_user = models.BooleanField(default=False)
投票
class Vote(models.Model):
"""
A vote on an object by a User.
"""
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
object = generic.GenericForeignKey('content_type', 'object_id')
vote = models.SmallIntegerField(choices=SCORES)
其它信息:
Python的版本:2.6.5
操作系統:Linux薄荷9(Linux的2.6.32-21-通用)
Django的:1.2
數據庫驅動程序:postgresql_psycopg2(2.2.1)
是否有其他模型依賴於'Comment'模型?什麼ForeignKey屬性引用評論?我猜你的數據庫有更多的「評論」模型。 – 2010-10-19 02:14:08
@ S.Lott這是真的,我有一個模型,從'Comment'模型繼承來添加一些額外的字段,我使用'django-voting'的'Vote'表,它有幾個條目指向到繼承模型。在這種情況下,Django不會執行「CASCADE DELETE」嗎? – 2010-10-19 02:41:49
@jeff charles:「在這種情況下,Django不會執行CASCADE DELETE嗎?」爲什麼呢?你從哪裏閱讀過文檔?是什麼給了你這個想法呢? – 2010-10-19 02:43:21