我有一个具有ManyToMany字段的模型,每次创建对象时,都需要使用以前创建的相同电话或电子邮件在数据库中搜索更多对象。

现在,我正在使用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。只需使用一个公共循环!少买一条线是没有价格可取的,但是在可读性,可维护性和空间效率方面存在许多缺点。此外,您可以一次将多个实例传递给add

if created:
    instance.other_leads.add(*Leads.objects.filter(
        email=instance.email,
        created__lt=instance.created))

关于python - 在保存时添加ManyToMany字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52275294/

10-12 02:37