sql >> Database >  >> RDS >> PostgreSQL

Django aangepaste unieke samen beperking

Je zou dit waarschijnlijk kunnen oplossen met postgresql's indexes on expressions maar hier is een andere manier:

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)

Maar het zou natuurlijk niet werken als u waarden wijzigt met QuerySet.update methode. Je zou ook kunnen kijken naar django-denorm , het lost dit op met triggers.




  1. Wanneer moet ik MySQL-transacties gebruiken?

  2. MySQL-trigger - verwijderen na update

  3. Hoe krijg je een float-resultaat door twee integerwaarden te delen met T-SQL?

  4. sql-maven-plug-in met meerdere scheidingstekens