创建实例时如何更新 ManyToManyField

art*_*_cs 7 django many-to-many signals django-models

我想在我尝试创建实例时更新字段,signals但似乎很复杂ManyToManyField

class MobileCustomer(models.Model):
    customer = models.CharField(max_length=30)
    phone = models.CharField(max_length=13)
    mobile = models.ManyToManyField(MobileStorage,through='SelectMobile')

class SelectMobile(models.Model):
    mobile = models.ForeignKey(MobileStorage,on_delete=models.CASCADE)
    item = models.ForeignKey(MobileCustomer,on_delete=models.CASCADE)
    quantity = models.PositiveIntegerField(default=1)
    imei = models.ManyToManyField(Imei)

class MobileStorage(models.Model):
    mobile = models.ForeignKey(Mobile,on_delete=models.CASCADE)
    quantity = models.PositiveIntegerField()

class Mobile(models.Model):
    mobile_name = models.CharField(max_length=40,unique=True)

class Imei(models.Model):
    imei = models.CharField(max_length=15,verbose_name='IMEI',unique=True)
    mobile = models.ForeignKey(MobileStorage,on_delete=models.CASCADE)
    active = models.BooleanField(default=True)
Run Code Online (Sandbox Code Playgroud)

我想ImeiMobileCustomer创建时更新模型中的活动字段!?我在我的CreateView form_valid

imei = Imei.objects.filter(selectmobile__item=self.object).update(active=False)
print(imei)
Run Code Online (Sandbox Code Playgroud)

它打印了 0 ?每当在 createview 中创建实例时,如何使用信号或 update() 使其工作

art*_*_cs 0

我必须使用m2m_changed像这样的信号 `def

def update_m2m(sender,instance,*args,**kwargs):
     Imei.objects.filter(pk__in=kwargs.get("pk_set")).update(active=False)
m2m_changed.connect(update_m2m,sender=SelectMobile.imei.through)
Run Code Online (Sandbox Code Playgroud)