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].関連エンティティに対するクエリ発行になるので、通常のフィールドと動きが異なるということでしょうか? なんか納得しました。

以上です。

コメント