2010-06-01 33 views
2

是否可以在django模型對象上設置基於表達式的約束,例如,如果我想在所有者只能擁有一個未處於過期狀態的給定類型的小部件的情況下施加約束,但只要它們過期,就可以擁有許多其他小部件。顯然,我可以通過覆蓋保存方法來做到這一點,但我想知道是否可以通過設置約束來完成,例如unique_together約束的一些衍生物Django - 基於表達式的模型約束

WIDGET_STATE_CHOICES = (
    ('NEW', 'NEW'), 
    ('ACTIVE', 'ACTIVE'), 
    ('EXPIRED', 'EXPIRED') 
) 

class MyWidget(models.Model): 
    owner = models.CharField(max_length=64) 
    widget_type = models.CharField(max_length = 10) 
    widget_state = models.CharField(max_length = 10, choices = WIDGET_STATE_CHOICES) 

    #I'd like to be able to do something like 
    class Meta: 
     unique_together = (("owner","widget_type","widget_state" != 'EXPIRED') 

回答