from django.db import models class Contact(models.Model): """Контакт в социальном графе.""" name = models.CharField(max_length=255, verbose_name='Имя') email = models.EmailField(blank=True, verbose_name='Email') phone = models.CharField(max_length=50, blank=True, verbose_name='Телефон') organization = models.CharField(max_length=255, blank=True, verbose_name='Организация') position = models.CharField(max_length=255, blank=True, verbose_name='Должность') notes = models.TextField(blank=True, verbose_name='Заметки') created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: ordering = ['name'] verbose_name = 'Контакт' verbose_name_plural = 'Контакты' def __str__(self): return self.name RELATION_TYPES = [ ('colleague', 'Коллега'), ('friend', 'Друг'), ('family', 'Родственник'), ('acquaintance', 'Знакомый'), ('business', 'Деловой партнёр'), ('other', 'Другое'), ] class Relation(models.Model): """Связь между двумя контактами.""" source = models.ForeignKey( Contact, on_delete=models.CASCADE, related_name='relations_as_source', verbose_name='Источник', ) target = models.ForeignKey( Contact, on_delete=models.CASCADE, related_name='relations_as_target', verbose_name='Цель', ) relation_type = models.CharField( max_length=50, choices=RELATION_TYPES, default='acquaintance', verbose_name='Тип связи', ) description = models.CharField(max_length=255, blank=True, verbose_name='Описание') created_at = models.DateTimeField(auto_now_add=True) class Meta: unique_together = ('source', 'target') verbose_name = 'Связь' verbose_name_plural = 'Связи' def __str__(self): return f'{self.source} → {self.target} ({self.relation_type})'