lee*_*ech 4 python django django-models django-orm
在django中处理whith模型继承时,是否可以删除模型子类的实例,而无需删除超类本身?
使用Django示例,您可以只删除Resturaunt对象并保留Place对象吗?
小智 10
昨天我正在寻找这个问题的答案,我想出了这个解决方案,这对我的问题已经足够了,但可以根据需要扩大规模.
假设你有一个餐厅和一个Place django模型,只有在没有触及Place表格内的行的情况下删除餐厅的方法是创建一个"假"餐厅模型,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
现在,您可以从该表中检索对象,就好像它没有绑定的外部关系:
place = Place.objects.get(pk=1)
restaurant = Restaurant.objects.get(pk=1)
fake_restaurant = FakeRestaurant.objects.get(pk=1)
fake_restaurant.delete()
Run Code Online (Sandbox Code Playgroud)
fake_restaurant和餐厅将不再存在,地点将保持不变.
干杯,戴维德
在 Django 1.9 中,参数keep_parents被添加到模型delete()函数中,因此为了让父母只需调用:
restaurant.delete(keep_parents=True)
Run Code Online (Sandbox Code Playgroud)
文档:https://docs.djangoproject.com/en/1.10/ref/models/instances/#django.db.models.Model.delete
更新:
显然,这个功能在 Django 1.9 中无法正常工作,请参阅评论。
| 归档时间: |
|
| 查看次数: |
2377 次 |
| 最近记录: |