Improve the date localte handling of the DetailView and DetailForm.

This commit is contained in:
Roberto Rosario
2016-03-09 23:22:31 -04:00
parent 216673c691
commit 2c9a01bdfc
4 changed files with 27 additions and 27 deletions

View File

@@ -69,6 +69,8 @@
{{ option.render }}
</div>
{% endfor %}
{% elif field|widget_type == 'datetimeinput' %}
{{ field.value }}
{% else %}
{% render_field field class+="form-control" %}
{% endif %}

View File

@@ -40,27 +40,27 @@ class ChoiceForm(forms.Form):
class DetailForm(forms.ModelForm):
def __init__(self, extra_fields=None, *args, **kwargs):
def __init__(self, *args, **kwargs):
self.extra_fields = kwargs.pop('extra_fields', ())
super(DetailForm, self).__init__(*args, **kwargs)
if extra_fields:
for extra_field in extra_fields:
result = return_attrib(self.instance, extra_field['field'])
label = 'label' in extra_field and extra_field['label'] or None
# TODO: Add others result types <=> Field types
if isinstance(result, models.query.QuerySet):
self.fields[extra_field['field']] = \
forms.ModelMultipleChoiceField(
queryset=result, label=label)
else:
self.fields[extra_field['field']] = forms.CharField(
label=extra_field['label'],
initial=escape(
return_attrib(
self.instance,
extra_field['field'], None
)
),
widget=PlainWidget)
for extra_field in self.extra_fields:
result = return_attrib(self.instance, extra_field['field'])
label = 'label' in extra_field and extra_field['label'] or None
# TODO: Add others result types <=> Field types
if isinstance(result, models.query.QuerySet):
self.fields[extra_field['field']] = \
forms.ModelMultipleChoiceField(
queryset=result, label=label)
else:
self.fields[extra_field['field']] = forms.CharField(
label=extra_field['label'],
initial=return_attrib(
self.instance,
extra_field['field'], None
),
widget=extra_field.get('widget', PlainWidget)
)
for field_name, field in self.fields.items():
if isinstance(field.widget, forms.widgets.SelectMultiple):

View File

@@ -8,7 +8,9 @@ from django.utils.translation import ugettext_lazy as _
from django.views.generic import (
FormView as DjangoFormView, DetailView, TemplateView
)
from django.views.generic.edit import CreateView, DeleteView, UpdateView
from django.views.generic.edit import (
CreateView, DeleteView, ModelFormMixin, UpdateView
)
from django.views.generic.list import ListView
from pure_pagination.mixins import PaginationMixin
@@ -332,12 +334,12 @@ class SingleObjectDeleteView(DeleteExtraDataMixin, ViewPermissionCheckMixin, Obj
return result
class SingleObjectDetailView(ViewPermissionCheckMixin, ObjectPermissionCheckMixin, ExtraContextMixin, DetailView):
class SingleObjectDetailView(ViewPermissionCheckMixin, ObjectPermissionCheckMixin, ExtraContextMixin, ModelFormMixin, DetailView):
template_name = 'appearance/generic_form.html'
def get_context_data(self, **kwargs):
context = super(SingleObjectDetailView, self).get_context_data(**kwargs)
context.update({'read_only': True})
context.update({'read_only': True, 'form': self.get_form()})
return context

View File

@@ -71,10 +71,6 @@ def get_descriptor(file_input, read=True):
return file_input
def render_date_object(date_time_object):
return force_text(formats.localize(date_time_object, use_l10n=True))
def return_attrib(obj, attrib, arguments=None):
try:
if isinstance(attrib, types.FunctionType):