Python Django模型继承:删除子类保留超类

Python Django模型继承:删除子类保留超类,python,django,django-models,django-orm,Python,Django,Django Models,Django Orm,在django中处理模型继承时,是否可以删除模型子类的实例,而不删除超类本身 使用,您是否可以仅删除resturaint对象并保留Place对象?昨天,我正在寻找这个问题的答案,我提出了这个解决方案,它对我的问题来说已经足够了,但可以根据需要进行扩展 假设您有一个餐厅和一个地点django模型,只删除一个餐厅而不触及该地点桌子内的行的方法是创建一个“假”餐厅模型,如下所示: class FakeRestaurant(models.Model): place_ptr = models.Po

在django中处理模型继承时,是否可以删除模型子类的实例,而不删除超类本身


使用,您是否可以仅删除
resturaint
对象并保留
Place
对象?

昨天,我正在寻找这个问题的答案,我提出了这个解决方案,它对我的问题来说已经足够了,但可以根据需要进行扩展

假设您有一个餐厅和一个地点django模型,只删除一个餐厅而不触及该地点桌子内的行的方法是创建一个“假”餐厅模型,如下所示:

class FakeRestaurant(models.Model):
    place_ptr = models.PositiveIntegerField(db_column="place_ptr_id", primary_key=True)
    serves_hot_dogs = models.BooleanField()
    serves_pizza = models.BooleanField()

    class Meta:
        app_label = Restaurant._meta.app_label
        db_table = Restaurant._meta.db_table
        managed = False
现在,您可以从该表中检索对象,就像它没有绑定的外部关系一样:

place = Place.objects.get(pk=1)
restaurant = Restaurant.objects.get(pk=1)
fake_restaurant = FakeRestaurant.objects.get(pk=1)
fake_restaurant.delete()
假餐厅和餐厅将不复存在,这个地方将保持原样

干杯,
Django 1.9中的Davide

将参数
保留父项
添加到model
delete()
函数中,因此要保留父项,只需调用:

restaurant.delete(keep_parents=True)
文件:

更新:


显然,此功能在Django 1.9中无法正常工作,请参见注释。

请注意,元类中的“托管”选项设置为true,即设置为False。编辑没有保留正确的缩进。谢谢:DI刚刚尝试了这个,1.9实现中似乎有一个bug。将删除与父对象的所有关系。这已在以后的版本中修复