Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:无法删除断开的多态模型实例_Django_Python 3.x_Django Polymorphic - Fatal编程技术网

Django:无法删除断开的多态模型实例

Django:无法删除断开的多态模型实例,django,python-3.x,django-polymorphic,Django,Python 3.x,Django Polymorphic,我在Django项目(托管在Heroku上)中设置了此模型,我正在使用: 类产品(多态模型): ... 教材(产品): ... 问题是,我已经设法创建了一个损坏的产品和书籍实例。当我有一个产品的实例,我想把它转换成书籍的实例时,就发生了这种情况,在一个疯狂的时刻,我做了这样一件愚蠢的事情: >p >b=书本() >b.。uuu dict=p.uuu dict__ >b.保存() 现在,我知道这是愚蠢的,它抛出了各种各样的错误。我的问题是,现在我遇到了一个无法删除的实例p。调用p.delete

我在Django项目(托管在Heroku上)中设置了此模型,我正在使用:

类产品(多态模型):
...
教材(产品):
...
问题是,我已经设法创建了一个损坏的
产品
书籍
实例。当我有一个
产品
的实例,我想把它转换成
书籍
的实例时,就发生了这种情况,在一个疯狂的时刻,我做了这样一件愚蠢的事情:

>p
>b=书本()
>b.。uuu dict=p.uuu dict__
>b.保存()
现在,我知道这是愚蠢的,它抛出了各种各样的错误。我的问题是,现在我遇到了一个无法删除的实例
p
。调用
p.delete()
时,出现以下错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-3-6a6f0dca8e5f> in <module>()
----> 1 p.delete()

~/.heroku/python/lib/python3.6/site-packages/django/db/models/base.py in delete(self, using, keep_parents)
    971
    972         collector = Collector(using=using)
--> 973         collector.collect([self], keep_parents=keep_parents)
    974         return collector.delete()
    975

~/.heroku/python/lib/python3.6/site-packages/django/db/models/deletion.py in collect(self, objs, source, nullable, collect_related, source_attr, reverse_dependency, keep_parents)
    220                     if self.can_fast_delete(sub_objs, from_field=field):
    221                         self.fast_deletes.append(sub_objs)
--> 222                     elif sub_objs:
    223                         field.remote_field.on_delete(self, field, sub_objs, self.using)
    224             for field in model._meta.private_fields:

~/.heroku/python/lib/python3.6/site-packages/django/db/models/query.py in __bool__(self)
    252
    253     def __bool__(self):
--> 254         self._fetch_all()
    255         return bool(self._result_cache)
    256

~/.heroku/python/lib/python3.6/site-packages/django/db/models/query.py in _fetch_all(self)
   1116     def _fetch_all(self):
   1117         if self._result_cache is None:
-> 1118             self._result_cache = list(self._iterable_class(self))
   1119         if self._prefetch_related_lookups and not self._prefetch_done:
   1120             self._prefetch_related_objects()

~/.heroku/python/lib/python3.6/site-packages/polymorphic/query.py in _polymorphic_iterator(self, base_iter)
     60                     break
     61
---> 62             real_results = self.queryset._get_real_instances(base_result_objects)
     63
     64             for o in real_results:

~/.heroku/python/lib/python3.6/site-packages/polymorphic/query.py in _get_real_instances(self, base_result_objects)
    360
    361                 else:
--> 362                     real_concrete_class = base_object.get_real_instance_class()
    363                     real_concrete_class_id = base_object.get_real_concrete_instance_class_id()
    364

~/.heroku/python/lib/python3.6/site-packages/polymorphic/models.py in get_real_instance_class(self)
    110         if model is not None \
    111                 and not issubclass(model, self.__class__) \
--> 112                 and not issubclass(model, self.__class__._meta.proxy_for_model):
    113             raise PolymorphicTypeInvalid("ContentType {0} for {1} #{2} does not point to a subclass!".format(
    114                 self.polymorphic_ctype_id, model, self.pk,

TypeError: issubclass() arg 2 must be a class or tuple of classes
TypeError回溯(最近一次调用)
在()
---->1 p.删除()
删除中的~/.heroku/python/lib/python3.6/site-packages/django/db/models/base.py(self、using、keep_parents)
971
972收集器=收集器(使用=使用)
-->973收集器。收集([自身],保留家长=保留家长)
974返回收集器。删除()
975
collect中的~/.heroku/python/lib/python3.6/site-packages/django/db/models/deletation.py(self、objs、source、nullable、collect\u related、source\u attr、reverse\u dependency、keep\u parents)
220如果可以快速删除(子对象,从字段=字段):
221 self.fast_deletes.append(sub_objs)
-->222 elif sub_objs:
223字段。远程字段。on_删除(self、field、sub_objs、self.using)
224用于模型中的字段。_meta.private_字段:
~/.heroku/python/lib/python3.6/site-packages/django/db/models/query.py in\uuuuu bool\uuuu(self)
252
253 def__________(自):
-->254 self._fetch_all()
255返回布尔值(自。\u结果\u缓存)
256
~/.heroku/python/lib/python3.6/site-packages/django/db/models/query.py in_fetch_all(self)
1116 def_fetch_all(self):
1117如果self.\u result\u缓存为无:
->1118 self.\u result\u cache=list(self.\u iterable\u class(self))
1119如果是自\u预取\u相关\u查找而不是自\u预取\u完成:
1120自我预取相关对象()
~/.heroku/python/lib/python3.6/site-packages/polymorphic/query.py in\u polymorphic\u迭代器(self,base\u iter)
60休息
61
--->62 real\u results=self.queryset.\u get\u real\u实例(基本\u结果\u对象)
63
64对于实际结果中的o:
~/.heroku/python/lib/python3.6/site-packages/polymorphic/query.py in\u get\u real\u实例(self、base\u result\u对象)
360
361其他:
-->362 real\u concrete\u class=base\u object.get\u real\u instance\u class()
363 real\u concrete\u class\u id=base\u object.get\u real\u concrete\u instance\u class\u id()
364
get\u real\u instance\u类(self)中的~/.heroku/python/lib/python3.6/site-packages/polymorphic/models.py
110如果模型不是无\
111而非发布类(型号、自身类)\
-->112而非issubclass(模型,自类,元代理,用于模型):
113 raise多态类型无效({1}{2}的ContentType{0}未指向子类!”。格式(
114 self.polymorphic_ctype_id,model,self.pk,
TypeError:issubclass()arg 2必须是类或类的元组
此外,如果我试着去做

> p = Product.objects.get(title='SomeTitle')
> p
<Product: SomeTitle>
> b = Book.objects.get(title=p.title)
p=Product.objects.get(title='SomeTitle') >p >b=Book.objects.get(title=p.title) 我得到了同样的错误。如果我创建了任何包含此
书籍
实例的QuerySet,它也会出现,这是一种问题


我的问题是:如何避免这个问题并删除损坏的实例?

您是否尝试过直接访问数据库,并通过SQL删除受影响的行?不,我实际上没有!我认为这是最好的方法,因为当出现类似情况时,多态模型可能会非常混乱。确实,它们可以..但它可以工作我不知道为什么我以前没有尝试过用SQL手动删除它。