在保存时添加 ManyToMany 字段
Add ManyToMany field on save
我有一个带有 ManyToMany 字段的模型,每次我创建一个对象时,我都需要在数据库中搜索更多具有相同 phone 或之前创建的电子邮件的对象。
现在,我正在使用 post_save 信号来执行此操作,但我想知道是否有更好的方法来执行此操作,也许是在创建序列化程序上。
class Leads(models.Model):
name = models.CharField(max_lenght=40)
phone = models.CharField(max_lenght=14)
email = models.EmailField()
other_leads = models.ManyToManyField('Leads')
created = models.DateTimeField(auto_now_add)
@receiver(post_save, sender=Leads)
def add_related(sender, instance, created, **kwargs)
if created:
[instance.other_leads.add(lead) for lead in Leads.objects.filter(email=instance.email, created__lt=instance.created)]
有一个信号处理程序就可以了。但是,如果您不使用它的值,则应该 never use a comprehension for its side effects。只需使用一个普通的循环!少一行没有任何代价,但在可读性、可维护性和 space 效率方面存在许多缺点。此外,您可以一次将多个实例传递给 add
:
if created:
instance.other_leads.add(*Leads.objects.filter(
email=instance.email,
created__lt=instance.created))
我有一个带有 ManyToMany 字段的模型,每次我创建一个对象时,我都需要在数据库中搜索更多具有相同 phone 或之前创建的电子邮件的对象。
现在,我正在使用 post_save 信号来执行此操作,但我想知道是否有更好的方法来执行此操作,也许是在创建序列化程序上。
class Leads(models.Model):
name = models.CharField(max_lenght=40)
phone = models.CharField(max_lenght=14)
email = models.EmailField()
other_leads = models.ManyToManyField('Leads')
created = models.DateTimeField(auto_now_add)
@receiver(post_save, sender=Leads)
def add_related(sender, instance, created, **kwargs)
if created:
[instance.other_leads.add(lead) for lead in Leads.objects.filter(email=instance.email, created__lt=instance.created)]
有一个信号处理程序就可以了。但是,如果您不使用它的值,则应该 never use a comprehension for its side effects。只需使用一个普通的循环!少一行没有任何代价,但在可读性、可维护性和 space 效率方面存在许多缺点。此外,您可以一次将多个实例传递给 add
:
if created:
instance.other_leads.add(*Leads.objects.filter(
email=instance.email,
created__lt=instance.created))