I'm stuck on thinking about implementing a "only one entry might be True for one combination".
A Project has n members (Guards) through an intermediate table.
- every Guard may be member of n Projects
- only one combination of Guard <-> Project is allowed (unique_together)
- a MemberShip might be the 'Main' one (is_main)
- BUT: Only one of the memberships may be Main.
Do I oversee something or do I have to implement a custom validation on my own?
To complete this, see the given Model:
class Project(models.Model):
client = models.ForeignKey(Client, on_delete=models.CASCADE)
shortname = models.CharField(_('shortname'), max_length=50)
description = models.TextField(_('description'), blank=True)
members = models.ManyToManyField(Guard, through='ProjectMembership')
class Meta:
unique_together = ['client', 'shortname']
class ProjectMembership(models.Model):
guard = models.ForeignKey(Guard, on_delete=models.CASCADE)
project = models.ForeignKey(Project, on_delete=models.CASCADE)
is_main = models.BooleanField(_('is main project'), default=False)
class Meta:
unique_together = ['guard', 'project']