Модельные наборы и поля даты - PullRequest
3 голосов
/ 18 мая 2009

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

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

Вот как я инициализирую набор моделей.

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

1 Ответ

6 голосов
/ 18 мая 2009

Обычный способ сделать это - переопределить типы полей по умолчанию в определении 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, но что-то вроде этот патч SelectDateTimeWidget может быть хорошим местом для начала.


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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...