from django.conf import settings from django.db import models class ProjectMembership(models.Model): project = models.ForeignKey( "projects.Project", on_delete=models.CASCADE, related_name="memberships" ) employee = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.PROTECT, related_name="project_memberships", ) role = models.CharField(max_length=100, default="Участник") planned_percent = models.DecimalField(max_digits=5, decimal_places=2, default=0) starts_on = models.DateField(null=True, blank=True) ends_on = models.DateField(null=True, blank=True) class Meta: constraints = [ models.UniqueConstraint( fields=["project", "employee"], name="project_member_unique" ), models.CheckConstraint( condition=models.Q(planned_percent__gte=0, planned_percent__lte=100), name="project_member_percent", ), models.CheckConstraint( condition=models.Q(ends_on__isnull=True) | models.Q(starts_on__isnull=True) | models.Q(ends_on__gte=models.F("starts_on")), name="project_member_dates", ), ]