2011-03-09 5 views
3

モデル:私はUSER_IDとprovince_id知っているときm2m関係のみを削除するには?

class Province(models.Model): 
    user = models.ManyToManyField(User, blank=True) 
    name = models.CharField(max_length=30, unique=True) 

class City(models.Model): 
    name = models.CharField(max_length=100, unique=True) 
    slug = models.SlugField(max_length=100, editable=False, unique=False) 
    ownership = models.ManyToManyField(User, through='UserCity') 


class UserCity(models.Model): 
    user = models.ForeignKey(User) 
    province = models.ForeignKey(Province) 
    city = models.ForeignKey(City) 


class District(models.Model): 
    name = models.CharField(max_length=100, unique=True) 
    slug = models.SlugField(max_length=100, unique=True, editable=False) 
    ownership = models.ManyToManyField(User, through='UserDistrict') 

class UserDistrict(models.Model): 
    user = models.ForeignKey(User) 
    province = models.ForeignKey(Province) 
    city = models.ForeignKey(City) 
    district = models.ForeignKey(District) 

どのように関係を削除することができますか?もし私のユーザーdelete()メソッドは、それも省を削除し、私はそれを避けたい。私はm2m分野で1つの特定の関係を削除する方法をどこにも見つけることができません。

答えて

10

​​マネージャで削除方法を使用してください。

Province.objects.get(id=3).user.remove(user_id) 

あなたがそう望む場合にも、直接を通じてテーブルにアクセスすることができます:あなたは2つのモデル間のすべてのインスタンスに対してのみ関係を削除する必要がある場合、あなたがすることによって、その

Province.user.through.objects.get(province__id=3, user__id=4).delete() 
+0

感謝を - 両方の方法で動作します。私が見ているように、それは私が宣言した他の関係 - 市 - 都道府県 - 市区町村 - を取り除かない。私はそれを手動で行う必要があると思います。 – robos85

+0

NP:問題は残っていますか?私はあなたが特に他の関係を削除したくないと思った? –

+0

hehe、私はすべての関係を記述されたそれに基づいて削除します。私は都道府県ユーザーの関係を削除するときに、他のすべての関係を削除します。私は自分の投稿を更新し、すべてのテーブルがあります。自動的に他の関係を削除することは可能ですか、それとも手作業で行う必要がありますか? – robos85

1

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

参照:M2M関係テーブルは、それが容易になる関係を削除するので、MyModel.relations.through介してアクセスすることができます特定provinceのすべてusersを削除します。

province.user.clear() 
関連する問題