2016-08-08 5 views
1

を使用してオブジェクトを削除するには、Djangoのを強制する方法:次のように私は、オブジェクトモデルを持っている多重継承

class Corporation(models.Model): 
    corp_id = models.AutoField(primary_key=True) 
    original_name = models.CharField(max_length=1000, blank=True, null=True) 
    address = models.ManyToManyField(Address, related_name='corp_address') 

class Person(models.Model): 
    person_id = models.AutoField(primary_key=True) 
    person_address = models.ManyToManyField(Address, related_name='person_address') 

class Address(models.Model): 
    address1 = models.CharField(max_length=500, blank=True, null=True) 
    address2 = models.CharField(max_length=500, blank=True, null=True) 
    city = models.CharField(max_length=100, blank=True, null=True) 
    state = models.CharField(max_length=100, blank=True, null=True) 
    zipcode = models.CharField(max_length=20, blank=True, null=True) 
    country = models.CharField(max_length=100, blank=True, null=True) 

class Committee(Corporation): 
    name = models.CharField(blank=True, max_length=200, null=True) 
    industry = models.CharField(blank=True, max_length=100, null=True) 

私は委員会のオブジェクトを作成すると、私は(株)とAddressオブジェクトを作成します。 1つのAddressオブジェクトには、複数の企業がポイントしている場合があります。

しかし、Committee.objects.delete()を実行すると、委員会オブジェクトは削除されますが、関連するCorporationオブジェクトやAddressオブジェクトは削除されません。

委員会オブジェクトを削除すると、別のオブジェクトがそれを指していない場合は、関連付けられたAddressオブジェクトを削除します。私はまた、別のオブジェクトがそれを指していない場合、関連するCorporationオブジェクトを削除したいと思う。

この条件付きカスケード削除を実行するにはどうすればよいですか?

答えて

1

djangoでカスケードに設定されているon_deleteをチェックすると、関連付けられたレコードも削除されます。お使いのモデルで

は、この方法でon_delete = models.CASCADEを追加してください:ここでは

class Car(models.Model): 
    manufacturer = models.ForeignKey(
     'Manufacturer', on_delete=models.CASCADE) 

はmodels.CASCADE削除とDjangoの多対多の関係を説明し良い postです。

+0

ありがとうございます。私はあなたの例でForeignKey()対ManytoMany()を使用することに気付きます。複数のオブジェクトがそのオブジェクトを指している場合、Addressオブジェクトを削除しますか? – book

+0

ManyToMany関係とカスケード削除の仕組みを理解しなければならないと思います。私はあなたに良い理解を与える記事で答えを更新しました。 – kt14