Django custom unique together constraint Django custom unique together constraint database database

Django custom unique together constraint


You probably could solve this with postgresql's indexes on expressions but here is another way:

class Share( models.Model ):    sharer = models.ForeignKey(User)    receiver = models.ForeignKey(User), related_name='receiver')    key = models.CharField(max_length=64, unique=True)    def save(self, *args, **kwargs):        self.key = "{}.{}".format(*sorted([self.sharer_id, self.receiver_id]))        super(Share, self).save(*args, **kwargs)

But it obviously wouldn't work if you change values with QuerySet.update method. You also could look at django-denorm, it solves this with triggers.