2010-06-01 6 views
2

Est-il possible de définir une contrainte basée sur l'expression sur un objet de modèle django, par ex. Si je veux imposer une contrainte où un propriétaire peut avoir seulement un widget d'un type donné qui n'est pas dans un état expiré, mais peut avoir autant d'autres tant qu'ils sont expirés. Évidemment, je peux le faire en remplaçant la méthode save, mais je me demande si cela peut être fait en définissant des contraintes, par ex. une dérivée de la contrainte unique_togetherDjango - Contraintes de modèle basées sur l'expression

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') 

Répondre

0

Non, je ne pense pas que cela va voler. Le model's expecting a tuple of tuples, puis la base modelform qui le vérifie semble grab and compare values, pas exécuter les expressions.

encore, vous pouvez le faire en économie(), comme vous le dites - ou en utilisant la validation des modèles, comme le souligne DR sur

Questions connexes