Comment créer des sous-formulaires à partir d'un Model Django
Un petit article Python de temps en temps ne fait pas de mal, donc ici je vais détailler la manière très simple d'utiliser les modèles Django pour créer des formulaires, mais aussi créer des sous-types de formulaire à partir du même modèle. Tout va s'expliquer :
Quand on créé un objet avec la couche de persistance de Django, on crée une nouvelle classe :
class User(models.Model):
username = models.CharField(max_length=255)
password = models.CharField(max_length=255)
email = models.EmailField(max_length=255)
blog = models.URLField(verify_exists=False)
created_at = models.DateTimeField(auto_now=True, auto_now_add=True)
def __unicode__(self):
return self.username
Cette classe permet de gérer automatiquement les données base de données, la DAO, et quelques validations. Maintenant il n'est pas rare de vouloir lier un formulaire à un tel objet, pour gérer de simple CRUD. Rien n'est plus simple avec Django où il suffit d'écrire le code suivant (toujours dans models.py) :
class UserForm(forms.ModelForm):
class Meta:
model = User
Ce code complexe permet non-seulement de gérer les champs associés à l'objet User, mais il possède aussi une interaction facilitée avec tous les objets persistants, voilà quelques exemples d'utilisations :
# loading object
aUser = User.objects.get(id=id);
# using it to create a bounded form to this object
aUserForm = UserForm(instance=aUser)
On peut aussi récupérer une instance de formulaire à partir d'un submiten utilisant la commande :
form = UserForm(request.POST)
if form.is_valid():
#etc.
Cette validation permet d'obtenir un objet clean avant la sauvegarde. Maintenant même si tout cela est très intéressant, ces informations sont présentes de bases dans la documentation officielle de Django, et je vais plutôt approfondir un point. Comment créer un formulaire à partir d'un modèle qui n'affiche pas tous les champs du modèle ?
Le système est prévu aussi pour ça, il permet de créer des sous-formulaires en sélectionnant les champs à afficher, on peut donc créer deux formulaires différents, une simple et une avancée :
class SimpleUserForm(forms.ModelForm):
class Meta:
model = User
fields = ('username', 'email', 'blog')
class AdvancedUserForm(forms.ModelForm):
class Meta:
model = User
fields = ('username', 'password', 'email', 'blog')
Ces formulaires partiels peuvent ainsi servir à afficher l'objet ou permettre l'édition mais que sur certains champs.
Vale
Newsletter
Stay updated with new articles.
Keep reading
Création de modèles avec PySide/PyQt
Ça y est ! mon dernier article sur développez.com est terminé, relu, vérifié, contre-vérifié etc. Alors si le développement rapide d'application vous intéresse ! Si vous avez envie de voir un autre pa...
Sep 5, 2010Introduction et prise en main de PyQt/PySide
Bonjour, j'ai peu bloggé ces temps-ci entre mes contributions pour Virgo, un sprint Django que je suis en train de finir, et mes rédactions d'articles pour développez.net. Pour me rattraper, j'ai déci...
Aug 26, 2010Pourquoi venir à la présentation "Architecture CQRS et performance avec Django" au #pyconfr
Bon déjà, c'est facile, c'est moi qui la ferait donc ça sera forcement intéressant (au moins un peu !), ensuite plusieurs points. Déjà ça répondra à certaines questions que vous pouvez vous posez :...
Sep 14, 2012
No comments yet. Be the first to comment!