2011-08-29 5 views
30

は、私はこれがあります。manytomanyからすべての関係を削除するには? 1つのモデルで

class MyModel(models.Model): 
    relations = models.ManyToManyField(OtherModel) 
    .... 

をし、私が選択した場合:

my_object.relations.remove(other_model_object) 

それが動作します。

どのように関係からすべてのオブジェクトを削除するには? my_object.relations.clean()が機能していません。

+4

.remove()との関係を削除します.clear()が、彼らは実際に関連するオブジェクトを削除しません...それはあなたがやろうとしていることですか? – Brandon

+0

はい、大変感謝しています。 – Nips

+0

ここをクリックhttp://stackoverflow.com/questions/4719137/how-do-i-remove-multiple-objects-in-a-manytomany-relationship-based-on-a-filter – madjardi

答えて

33

まず、.clear()または.remove()のどちらかを使用して関係をクリアする必要があります。いずれかが必要な場合は、according to the docsの方が良いでしょう。

その後、[YourModel]を使用してオブジェクトを削除する必要があります。 delete()メソッド。

23

2つのモデル間のすべてのインスタンスのリレーションシップのみを削除する必要がある場合は、リレーションシップテーブルのマネージャにアクセスしてリレーションシップを行うことができます。 M2M関係テーブルは、それが容易になる関係を削除するためのMyModel.relations.throughを介してアクセスすることができる。

MyModel.relations.through.objects.all().delete() 

参照:

https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ManyToManyField.through

+25

このように注意してくださいthrough.objectsを呼び出してm2mテーブルのすべての行を削除し、m2mをMyModelから切り離します。だからあなたは 'Author.books.through.objects.filter(author_id = author.pk).delete()'のようなことをする必要があります – Christoffer

+0

これは私が探していたものでした。有用ではあるが正解ではない。 – benzkji

+0

警告!これは、関係テーブル全体を削除するので、本当に危険な機能です! –

関連する問題