2010-09-30 3 views
3

Il ya une question très similaire à cela, mais je voulais le demander d'une manière différente. Je suis un gars très personnalisé, mais j'aime prendre des raccourcis à la fois. Alors voilà.Django Advantage formes.Form vs forms.ModelForm

Je trouve ces deux classes très similaires bien que l'on "aide" le programmeur à écrire du code plus rapidement ou à avoir moins de code/répétition de code. Connecter des modèles à Forms ressemble à une chose évidente à faire. Une chose qui n'est pas particulièrement claire dans les docs utilisant un ModelForm. Que se passe-t-il si vous avez besoin d'ajouter des champs supplémentaires qui ne sont pas dans le modèle ou qui sont en quelque sorte connectés à un autre modèle? Je suppose que vous pourriez sous-classer cela et le faire fonctionner, mais est-ce que cela vous aide vraiment à gagner du temps que de le faire manuellement avec un formulaire? Donc, la question suivante peut ne pas avoir de réponse définitive si je la sous-classe, et que j'utilise ModelForm. ModelForm est-il particulièrement rapide que Form? Utilise-t-il toujours les mêmes techniques de mise à jour ou se lie-t-il significativement plus vite dans l'un ou l'autre?

Répondre

3

Si vous voulez un formulaire sur deux modèles, vous avez deux options:

1) créer deux modelforms, enregistrer chacun individuellement lorsque affiché, et si l'un des deux dépend de l'autre (c.-à-foreignkey), définissez cela dans votre vue avant de sauvegarder.

2) essayer formset en ligne de Django: http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#using-an-inline-formset-in-a-view

3) Ajouter des champs non-modèle à votre ModelForm. Sur un ModelForm, vous pouvez ajouter des champs qui ne sont pas liés à votre modèle. Ils sont disponibles dans clean_data comme n'importe quel autre champ, mais sont simplement ignorés lorsque le modèle est sauvegardé. Un des avantages de ModelForm par rapport à Form est que vous pouvez spécifier l'ordre des champs (en cherchant comment commander des champs de formulaire apportés à votre poste de façon incidente). D'autres avantages évidents sont que vous n'avez pas à réécrire votre code d'économie de modèle

+0

Cela a du sens, merci. – Atherion