2 votes

Données initiales du formulaire à partir du modèle - Django

J'essaie de créer un formulaire d'édition pour mon modèle. Je n'ai pas utilisé de formulaire de modèle parce que selon le type de modèle, l'utilisateur peut utiliser différents formulaires. (Par exemple, l'un des formulaires comporte un widget Tinymce, tandis que l'autre n'en a pas).

Existe-t-il un moyen de définir les données initiales d'un formulaire (pas d'un ModelForm ) à l'aide d'un modèle ?

J'ai essayé ce qui suit mais j'ai obtenu une erreur :

b = get_object_or_404(Business, user=request.user)
form = f(initial = b)

f est une sous-classe de forms.Form

L'erreur que j'obtiens est la suivante AttributeError: 'Business' object has no attribute 'get'

6voto

georgebrock Points 9582

Les données initiales doivent être un dict (ou au moins avoir un dict -qu'un modèle Django ne possède pas).

Vous pouvez construire un dict de votre modèle en utilisant django.forms.models.model_to_dict :

from django.forms.models import model_to_dict
b_as_dict = model_to_dict(b)

Il s'agit de la même fonction que celle intégrée dans Django, à savoir ModelForm pour définir ses données initiales, et bien que vous ayez spécifié que vous ne souhaitiez pas utiliser une classe ModelForm il peut être plus pratique de trouver une façon de structurer votre code qui vous permette de le faire.

6voto

LuoTao Points 61

Il existe un moyen plus direct d'utiliser les données du modèle que la dictée. Voir l'exemple dans la documentation .

b = get_object_or_404(Business, user=request.user)
form = f(instance = b)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X