Django の、Model の ManyToMany の 全削除した後、追加する方法がわからず、
調べた結果を記載します。
やりたいことは、関連エンティティのリレーションの全削除で、
Model自体は削除せず残しておきたいになります。
Django: remove all m2m relations - Stack Overflow
-
関連の削除
StackOverFlow の記載のコピー&ペーストになりますが、
以下のようなModelがあるとして、
class Post(models.Model): title = models.CharField(max_length=100) tags = models.ManyToManyField(Tag, blank=True)tagsのデータを削除するには、clearメソッドを使えばいいようです。
for post in Post.objects.all(): post.tags.clear() -
関連の追加
以下でaddメソッドでできます。
post.tags.add(tag) -
補足
clearメソッドも、addメソッドも、実行後にsaveメソッドの実行は不要で、
with transaction.atomic():とかしていなければ、実行時に変更が反映されるようです。1
[1].関連エンティティに対するクエリ発行になるので、通常のフィールドと動きが異なるということでしょうか? なんか納得しました。
以上です。
コメント