创建实例时如何更新ManyToManyField [英] how to update ManyToManyField while an instance been created

查看:263
本文介绍了创建实例时如何更新ManyToManyField的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

i want to to update field whenever an instance been created i tried signals but it seems complicate to 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)

我想更新 Imei <中的活动字段/ code>创建 MobileCustomer 的模型!
i在我的 CreateView form_valid

imei = Imei.objects.filter(selectmobile__item=self.object).update(active=False)
print(imei)

并打印0?
如何在信号内部或在createview中创建的实例时使用update()使其工作

and it printed 0 ? how to make it work either using signals or update() whenever an instance created inside createview

推荐答案

使用 m2m_changed 信号看起来像这样的'def

i had to use m2m_changed signal look like this `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)

这篇关于创建实例时如何更新ManyToManyField的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆