La manière habituelle de faire est de override the default field types dans votre définition de ModelForm.
L'exemple ci-dessous fonctionnerait si vous aviez un champ DateField dans votre modèle (je remarque que vous avez un champ DateTimeField ... J'y reviendrai dans une seconde). Vous allez spécifier le même type de champ que celui qui est normalement spécifié, mais vous allez passer un widget différent au constructeur du champ de formulaire.
from django.db import models
from django import forms
from django.forms.extras import SelectDateWidget
class MyModel(models.Model):
a_date_field = models.DateField()
class MyModelForm(forms.ModelForm):
a_date_field = forms.DateField(widget=SelectDateWidget())
class Meta:
model = MyModel
Il n'y a pas, à ma connaissance, d'un widget équivalent prévu à DateTimeField
dans Django 1.0.x. Dans ce cas, vous voudrez créer un widget personnalisé, en sous-classant peut-être SelectDateWidget
. Je note d'un google rapide sur SelectDateTimeWidget
qu'il y a eu plusieurs autres qui ont fait ce qui semble être le widget que vous recherchez. Je ne les ai pas utilisés, donc caveat emptor, mais quelque chose comme this SelectDateTimeWidget patch pourrait être un bon point de départ.
Edit: Lorsque vous utilisez un ModelFormset ou InlineModelFormset, vous pouvez toujours y parvenir en passant form=MyModelForm
à la fonction inlineformet_factory
:
MyModelFormset = inlineformset_factory(MyParentModel, MyModel, form=MyModelForm)
Cela fonctionne parce que les deux usines de Formset modèle appellent en fait le constructeur formset_factory
régulier dans leurs propres implémentations. C'est un peu difficile à comprendre parce que ce n'est pas explicitement indiqué dans les docs ... plutôt que les docs de Django font allusion à cette capacité en mentionnant en passant que les usines de formset model étendent le normal formset_factory. Chaque fois que je suis dans le doute, j'ouvre django/forms/models.py
pour vérifier la signature complète des fonctions d'usine formset.
Merci pour la réponse, Cependant, j'ai oublié de mentionner que j'utilise inlineformset pour initialiser le formulaire. J'ai aussi édité la question. – crashekar
Pas de soucis ... J'ai mis à jour la réponse. –
Bonne réponse. Mais ... "proscrit" signifie "interdit" - Je ne pense pas que ce soit ce que vous vouliez dire. Peut-être que «prescrit» est plus proche du sens que vous recherchez. –