如何删除只有m2m关系?(How to delete ONLY 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)

当我知道user_id和province_id时,如何删除关系? 如果我用户delete()方法它也删除省,我想避免它。 我找不到如何在m2m字段中删除1个特定关系。

model:

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)

How can I delete relation when I know user_id and province_id? If i user delete() method it also removes province and I want to avoid it. I can't find anywhere how to delete 1 specific relation in m2m field.

最满意答案

使用ManyToMany管理器上的remove方法。

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

如果您愿意,您也可以直接访问直通表:

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

Use the remove method on your ManyToMany manager.

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

You can also access the through table directly if you so desire:

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

更多推荐