2009-05-18 3 views
3

У меня есть модельный набор моделей на модели с несколькими полями даты, что опять-таки является DateTimeField в модели. Но когда он отображается в шаблоне, он отображается как текстовое поле. Как я могу показать это как раскрывающийся список?Форматы форм моделей и поля даты

WFormSet = inlineformset_factory(UserProfile, W, can_delete=False,exclude=[<list of fields to be excluded>], extra=3) 

Вот как я делаю моделирование модели.

Как переопределить эти настройки

ответ

6

Обычный способ сделать это, чтобы override the default field types в вашем определении ModelForm.

Приведенный ниже пример будет работать, если у вас есть DateField в вашей модели (я отмечаю, что у вас есть DateTimeField ... Я вернусь к этому за секунду). Вы будете указывать тот же тип поля, который обычно указывается, но вы передадите другой виджет в конструктор поля формы.

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 

Существует нет, насколько мне известно, эквивалентный виджете, предусмотренном для DateTimeField в Django 1.0.x. В этом случае вам нужно создать собственный виджет, возможно, подклассифицировать SelectDateWidget. Я отмечаю из быстрого google на SelectDateTimeWidget, что было несколько других, которые делали то, что, кажется, виджет, который вы ищете. Я не использовал их, так что остерегайтесь emptor, но что-то вроде this SelectDateTimeWidget patch может быть хорошим местом для начала.


Edit: При использовании ModelFormset или InlineModelFormset, вы можете достичь этого путем пропускания form=MyModelForm к inlineformet_factory функции:

MyModelFormset = inlineformset_factory(MyParentModel, MyModel, form=MyModelForm) 

Это работает, потому что две модели formset фабрики фактически называют регулярные formset_factory конструктор в их собственных реализациях. Это немного сложно понять, потому что это явно не указано в документах ... скорее, Django docs ссылаются на эту способность, попутно отмечая, что заводы фабрики форм расширяют нормальный formet_factory. Всякий раз, когда я сомневаюсь, я открываю django/forms/models.py, чтобы проверить полную подпись заводских функций набора форм.

+0

Спасибо за ответ Однако я забыл упомянуть, что я использую inlineformset для инициализации формы. Я также отредактировал этот вопрос. – crashekar

+0

Не беспокойтесь ... Я обновил ответ. –

+0

Хороший ответ. Но ... «запрещенные» означает «запрещено» - я не думаю, что это вы имели в виду. Возможно, «предписанное» ближе к значению, которое вы ищете. –

 Смежные вопросы

  • Нет связанных вопросов^_^