PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Restrição de conjunto exclusivo personalizado do Django


Você provavelmente poderia resolver isso com os indexes on expressions do postgresql mas aqui está outra maneira:
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)

Mas obviamente não funcionaria se você alterasse os valores com QuerySet.update método. Você também pode ver django-denorm , ele resolve isso com gatilhos.