Django constraint for "field one not in field two for any row"?

40 views Asked by At

Suppose I have a Django model with two fields one and two:

class MyModel(models.Model):
    one = models.CharField(max_length=100, unique=True)
    two = models.CharField(max_length=100)

unique=True means if I try to put in a row with one="one" when another such row already exists, a unique constraint will be violated.

How would I make a Django constraint that says if there is a row with one="one", then I can't put in a row with two="one"?

This does seem related to this question and this answer, but I don't quite see the answer to my question.

1

There are 1 answers

1
Daniel On

For custom validation like this I've found it best to override the save method, as @Hemal Petal mentioned:

models.py from django.core.exceptions import ValidationError

def save(self, *args, **kwargs):

    if MyModel.objects.filter(
        two=self.one
    ).exists():
        raise ValidationError(f'{self.one} already exists in column two!')
    
    return super().save(*args, **kwargs)