5

djangoでモデルの継承を処理する場合、スーパークラス自体を削除せずに、モデルサブクラスのインスタンスを削除することは可能ですか?

Djangoの例を使用して、オブジェクトだけを削除してResturauntオブジェクトを保持できPlaceますか?

4

2 に答える 2

10

昨日、私はこの質問に対する答えを探していました。この解決策を思いつきました。これは私の問題には十分でしたが、必要に応じてスケールアップすることができました。

レストランとプレイスの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()

fake_restaurantとrestaurantはもう存在せず、場所はそのまま残ります。

乾杯、ダビデ

于 2012-07-13T07:09:33.873 に答える
7

Django 1.9では、keep_parentsモデルdelete()関数にパラメーターが追加されたため、親を維持するには、次のコマンドを呼び出すだけです。

restaurant.delete(keep_parents=True)

ドキュメント:https ://docs.djangoproject.com/en/1.10/ref/models/instances/#django.db.models.Model.delete

アップデート:

どうやら、この機能はDjango1.9では正しく機能していません。コメントを参照してください。

于 2017-01-25T16:40:03.100 に答える