2009-07-30 6 views
2

Django管理インターフェースを使用して多対多関係のオブジェクトをいくつか削除したいと思います。標準削除では、関連するすべてのオブジェクトおよび削除されたオブジェクトのリストが確認ページに表示されなくなります。しかし、私は関連するオブジェクトを削除する必要はありません!Django管理インターフェースで多対多関係のオブジェクトをスマートに削除

たちはContentTopicとのContentItemを持っていると仮定します

class ContentTopic(models.Model): 
    name = models.CharField() 
    code = models.CharField() 

class ContentItem(models.Model): 
    topic = models.ManyToManyField(ContentTopic, db_index=True,\ 
    blank=True, related_name='content_item') 

だから、私は、Djangoの管理を使用してContentTopicインスタンスを削除したいが、私はすべての関連ContentItemsを削除する必要はありません。したがって、確認ページには削除するContentTopicインスタンスのみが表示されます。

これを処理する最善の方法は何ですか?

答えて

0

これは、そうするために開発されたものです。 この動作を変更したい場合は、片方向が削除方法のdjango.db.models.Modelになる可能性があります。

このdelete()メソッドは、実際には、すべての従属オブジェクトのリストを収集して削除する2つのことを実際に行います。ここでは、それをオーバーライドして、依存するオブジェクトのリストを取得し、それを反復して参照をNoneに設定することができます。そして、関係するオブジェクトをきれいに削除する。

この動作が一貫して必要な場合は、django.db.models.Modelsからクラスを拡張し、delete()を上書きし、この新しいクラスからすべてのモデルを拡張できます。