How can I set a table constraint “deferrable initially deferred” in django model?

前端 未结 3 1273
南旧
南旧 2021-01-05 20:10

I am trying to set a constraint to a table model in django with a postgresql database.

I can do it via postgresql with this sentence:

ALTER TABLE pub         


        
3条回答
  •  难免孤独
    2021-01-05 20:58

    Very recently, Django has added support for this feature (See ticket). Starting from Django 3.1 you can write:

    class UniqueConstraintDeferrable(models.Model):
        name = models.CharField(max_length=255)
        shelf = models.CharField(max_length=31)
    
        class Meta:
            required_db_features = {
                'supports_deferrable_unique_constraints',
            }
            constraints = [
                models.UniqueConstraint(
                    fields=['name'],
                    name='name_init_deferred_uniq',
                    deferrable=models.Deferrable.DEFERRED,
                ),
                models.UniqueConstraint(
                    fields=['shelf'],
                    name='sheld_init_immediate_uniq',
                    deferrable=models.Deferrable.IMMEDIATE,
                ),
            ]
    

提交回复
热议问题