Добавить поле ManyToMany при сохранении - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть модель с полем 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)]

1 Ответ

0 голосов
/ 11 сентября 2018

Хорошо иметь обработчик сигнала.Тем не менее, вы никогда не должны использовать понимание его побочных эффектов , если вы не используете его значение.Просто используйте общий цикл!Нет цены, которую можно выиграть за одну меньшую линию, но есть много минусов с точки зрения читабельности, удобства обслуживания и эффективности использования пространства.Кроме того, вы можете передать несколько экземпляров одновременно add:

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