2010-11-22 9 views
0

Dans mon administration des utilisateurs pour la page de chaque individu, en plus des jeux de champs django par défaut, j'ai aussi deux autres inlines (UserProfile et un modèle appelé "Extension"). Cependant, chaque fois que je modifie des champs dans l'extension de l'extension, je veux aussi pouvoir traiter/valider tous ces champs.Validation des données Django sous forme (admin/auth/user)

UserProfile:

user = models.ForeignKey(User, unique=True) 
client = models.ForeignKey(Client) 

Extension:

user = models.ForeignKey(User) 
date_created = models.DateTimeField(auto_now_add=True, auto_now=True) 
number = models.CharField(max_length=16, unique=False) 

Par exemple, quand je l'édition des numéros de poste d'un utilisateur, je veux être en mesure de saisir toutes les valeurs à l'intérieur de chaque champ (qui sont dynamique). En ce moment je suis en utilisant self.data [ « »] comme ceci:

extension_fields = [self.data["extension_set-0-number"], 
        self.data["extension_set-1-number"], 
        self.data["extension_set-2-number"]] 

Un problème que cela pose est que je suppose qu'il sera toujours seulement 3 champs d'extension, ce qui est pas toujours vrai. Comment puis-je faire une boucle dans chaque champ en ligne correctement?

+0

Comment ajoutez-vous cela en tant qu'inlines au formulaire utilisateur maintenant? Cela affecte la façon dont vous pouvez utiliser la validation, etc. –

+0

Extension et UserProfile sont des modèles distincts dans mon models.py et je les étend dans admin.py. Extension a une clé étrangère à User et UserProfile à l'utilisateur et un client. – chiurox

Répondre

1

Comment puis-je boucler correctement chaque champ en ligne?

Vous pouvez utiliser une list comprehension en boucle à travers eux:

extension_fields = [self.data[k] for k in self.data.keys() if 'extension_set' in k] 

Je ne suis pas tout à fait convaincu que c'est la bonne façon de mettre en œuvre, cependant. Vous n'avez pas fourni assez de code d'exemple pour expliquer ce que vous faites exactement. Si vous essayez de traiter et de valider ces données, Django devrait le faire pour vous (probablement en utilisant un ModelForm). Vous ne devriez pas avoir à coder cela vous-même.