2010-09-23 7 views
1

J'ai une page où il affiche une liste d'instances de modèles filtrés et permet aux utilisateurs de mettre à jour certains champs ou d'ajouter de nouveaux champs sous forme de formulaire. Je suis curieux ce qui wpuld être une manière intelligente de faire ceci, pour supprimer et réenregistrer toutes les données d'entrée ou faire la comparaison pour chaque données et enregistrer les champs édités/nouveaux & entités.Django: formulaire qui met à jour X nombre de modèles

Je voudrais vous faire attention que j'utilise postgres pour enregistrer ces valeurs et j'affiche environ 20 entrées pour ce formulaire.

Répondre

11

L'objet QuerySet a la méthode update() - il est utilisé par exemple. Panneau d'administration pour la mise à jour en bloc de plusieurs objets sélectionnés à partir de listes de modifications. Voici la référence de la méthode au django's official documentation.

Comment l'utiliser:

il suffit de créer queryset avec les modèles que vous souhaitez mettre à jour (assumng que MyModel a champ nommé 'my_field'):

qs = MyModel.objects.all() 
qs.update(my_field=value) 

Ca y est - rappelez-vous que la mise à jour() La méthode n'enverra aucun signal comme la méthode save() - elle lancera simplement la requête directement à la base de données. Comme pour 'ajouter des champs via formulaire' - je ne sais pas si je l'ai eu raison? Vous souhaitez ajouter des modèles associés supplémentaires ou ajouter dynamiquement des champs à la table de modèles dans la base de données?

Si vous voulez ajouter des modèles associés, utilisez InlineFormset (http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#inline-form) - c'est assez facile à manipuler. Sinon, vous devez ajouter des champs à _meta des modèles comme décrit ici: How dynamic add custom field to model.

+0

merci beaucoup de pointer l'essentiel! – Hellnar

Questions connexes