2009-07-29 12 views
1

Comment puis-je spécifier une liste noire pour un champ CharField? Cependant, je veux que la liste noire soit efficace dans le panneau d'administration de Django ... sinon je le validerais dans la vue.Limitations de Django CharField

Par liste noire, je veux dire les valeurs qui ne peuvent pas être utilisées. Je mets aussi un réglage unique pour la valeur mais j'aimerais désactiver quelques cordes aussi.

Merci, Max

Répondre

1

Je remplacerait la méthode save() du modèle et la valeur à insérer par rapport à une liste noire avant d'appeler la méthode save() de la classe parente.

Quelque chose comme ça (simplifié):

class BlackListModel(models.Model): 
    blacklist = ['a', 'b', 'c'] 

    # your model fields definitions... 

    def save(self, *args, **kwargs): 
     if self.blacklist_field in self.blacklist: 
      raise Exception("Attempting to save a blacklisted value!") 
     return super(BlackListModel, self).save(*args, **kwargs) 

De cette façon, cela fonctionne dans toutes vos applications.

0

Ce n'est pas possible de la boîte. Vous devez écrire un custom form field ou ajouter custom admin handling pour effectuer la validation au niveau de l'administrateur. Pour le faire au niveau de la base de données, je suppose que vous devrez mettre en place une sorte de déclencheur et une procédure stockée, mais ce n'est pas mon domaine, donc je vais laisser ça aux autres.

Questions connexes