2011-03-09 2 views
3
modèle

:Comment supprimer uniquement m2m relation?

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) 

Comment puis-je supprimer relation quand je sais user_id et province_id? Si j'utilise la méthode delete(), elle supprime également province et je veux l'éviter. Je ne trouve nulle part comment supprimer 1 relation spécifique dans le champ m2m.

Répondre

10

Utilisez la méthode remove sur votre gestionnaire ManyToMany.

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

Vous pouvez également accéder à la table par directement si vous le souhaitez:

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

Merci - les deux méthodes fonctionne. Comme je vois cela ne supprime pas d'autres relations que j'ai déclarées - ville-province, ville-district. Je suppose que je dois le faire manuellement. – robos85

+0

NP: est-ce qu'il reste un problème? Je pensais que vous ne vouliez pas supprimer les autres relations? –

+0

hehe, je veux supprimer toutes les relations basées sur celle décrite. Lorsque je supprime une relation province-utilisateur, toutes les autres relations doivent être supprimées. J'ai mis à jour mon post et il y a toutes mes tables. Est-il possible de supprimer d'autres relations automatiquement ou je dois le faire à la main? – robos85

1

Je sais que cette question est vieux ... Si vous voulez supprimer tous les users d'un province spécifique:

province.user.clear() 
Questions connexes