I have the following models:
class Project(models.Model):
""" Handles the user projects """
#--> Fields
name = models.CharField(
verbose_name = ('Name'),
max_length = 300,
help_text = ('The name of the project.'),
)
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete = models.CASCADE,
related_name = 'project_user',
verbose_name = ('Created by'),
help_text = ('User that created this project.')
)
date = models.DateTimeField(
verbose_name = ('Creation Date'),
default = timezone.now,
help_text = ('The project creation date.')
)
class ProjectUser(models.Model):
""" To link users to projects from other users """
#--> Fields
project = models.ForeignKey(
'Project',
on_delete = models.CASCADE,
related_name = 'projectuser_project',
verbose_name = ('Project'),
)
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete = models.CASCADE,
related_name = 'projectuser_user',
verbose_name = ('Link to'),
help_text = ('User to link with this project'),
)
link_by = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete = models.CASCADE,
related_name = 'projectuser_link_by',
verbose_name = ('Linked by'),
help_text = ('User creating the link'),
)
date = models.DateTimeField(
verbose_name = ('Link Date'),
default = timezone.now,
help_text = ('Link creation date.'),
)
Now in ProjectUser
, I want to add a constraint to avoid adding a link between a project and the user that created the project. But I cannot manage to set up the Q object. The first constraint in the Meta class works as expected.
Any advice?
class Meta:
""" """
constraints = [
models.UniqueConstraint(
fields = ['project', 'user'],
name = 'no_repeated_link',
),
models.CheckConstraint(
check = ~Q('project__user'=='user'),
name = 'no_creator_link',
),
]