sql >> Databáze >  >> RDS >> PostgreSQL

Django vlastní jedinečné společné omezení

Pravděpodobně byste to mohli vyřešit pomocí indexes on expressions postgresql ale tady je jiný způsob:

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)

Ale samozřejmě by to nefungovalo, pokud byste hodnoty změnili pomocí QuerySet.update metoda. Můžete se také podívat na django-denorm , řeší to pomocí spouštěčů.




  1. Získání zprávy SQLEXCEPTION v procedurách MySQL 5.5.x

  2. Alternativní syntaxe fulltextového vyhledávání MySQL

  3. Jak provést vícenásobné vkládání a nahrávání obrázků v PHP?

  4. Jaké jsou životaschopné vrstvy abstrakce databáze pro Python