Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Define Django Model Constraints

I want to add a constraint onto a model that involves a reference to another model object. In the code below, I want to have, on the ProjectMember model, the project_member field constrained to be different from the project_creator in the project model.

class User(models.Model):
  fullname = models.CharField(max_length=200)
  email = models.EmailField(max_length=254)
  password = models.CharField(max_length=254)


class Project(models.Model):
  name = models.CharField(max_length=200)
  timestamp = models.DateTimeField("date created", auto_now=True)
  project_creator = models.ForeignKey(User, on_delete=models.CASCADE)


class ProjectMember(models.Model):
  project = models.ForeignKey(Project, on_delete=models.CASCADE)

  project_member = models.ForeignKey(
      User,
      on_delete=models.CASCADE,
      verbose_name="member of the project"
  )

  class Meta:
      order_with_respect_to = 'user_member'
      constraints = [
          models.CheckConstraint(check= , 
             name='project creator not project member'),
      ]
like image 468
Chris Claude Avatar asked Dec 02 '25 23:12

Chris Claude


1 Answers

You can add it in a Q object like so,

class Meta:
  order_with_respect_to = 'user_member'
  constraints = [
      models.CheckConstraint(check=~Q(project_member_id=project__project_creator_id) , 
         name='project creator not project member'),
  ]

Hope this helps!

like image 58
devdob Avatar answered Dec 04 '25 14:12

devdob



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!