Skip to content

Instantly share code, notes, and snippets.

@dgmdan
Created June 25, 2020 21:44
Show Gist options
  • Save dgmdan/e7888a73c14446dccd7ad9aaf5055b10 to your computer and use it in GitHub Desktop.
Save dgmdan/e7888a73c14446dccd7ad9aaf5055b10 to your computer and use it in GitHub Desktop.
from django.db import models
from django.db.models.signals import post_save, post_delete
from django.dispatch import receiver
class Contact(models.Model):
last_name = models.TextField(default='', blank=True)
connections = models.ManyToManyField('self',
through='ContactConnection',
symmetrical=True,
blank=True)
def __str__(self):
return self.last_name
def get_connections(self):
return ', '.join([str(p.last_name) for p in self.connections.all()])
class ContactConnection(models.Model):
to_contact = models.ForeignKey(Contact, on_delete=models.CASCADE, related_name='to_contacts')
from_contact = models.ForeignKey(Contact, on_delete=models.CASCADE, related_name='from_contacts')
comments = models.TextField(default='', blank=True)
@receiver(post_save, sender=ContactConnection)
def post_save(sender, instance, created, **kwargs):
if created:
sender.objects.get_or_create(to_contact=instance.from_contact,
from_contact=instance.to_contact,
defaults={'comments': instance.comments})
@receiver(post_delete, sender=ContactConnection)
def post_delete(sender, instance, **kwargs):
sender.objects.filter(to_contact=instance.from_contact,
from_contact=instance.to_contact).delete()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment