diff --git a/django/contrib/admin/templates/admin/date_hierarchy.html b/django/contrib/admin/templates/admin/date_hierarchy.html
index 7662ed18f9..7c6df3d3ca 100644
--- a/django/contrib/admin/templates/admin/date_hierarchy.html
+++ b/django/contrib/admin/templates/admin/date_hierarchy.html
@@ -1,3 +1,4 @@
+{% if show %}
+{% endif %}
\ No newline at end of file
diff --git a/django/contrib/admin/templatetags/admin_list.py b/django/contrib/admin/templatetags/admin_list.py
index ba9c7ec340..5cb775d5ce 100644
--- a/django/contrib/admin/templatetags/admin_list.py
+++ b/django/contrib/admin/templatetags/admin_list.py
@@ -147,7 +147,7 @@ def result_headers(cl):
def items_for_result(cl, result):
first = True
- pk = cl.lookup_opts.pk.name
+ pk = cl.lookup_opts.pk.attname
for field_name in cl.lookup_opts.admin.list_display:
row_class = ''
try:
@@ -160,7 +160,7 @@ def items_for_result(cl, result):
except ObjectDoesNotExist:
result_repr = EMPTY_CHANGELIST_VALUE
else:
- field_val = getattr(result, f.column)
+ field_val = getattr(result, f.attname)
if isinstance(f.rel, meta.ManyToOne):
if field_val is not None:
@@ -246,7 +246,8 @@ def date_hierarchy(cl):
if year_lookup and month_lookup and day_lookup:
month_name = MONTHS[int(month_lookup)]
- return { 'back':
+ return { 'show': True,
+ 'back':
{ 'link' : link({year_field: year_lookup, month_field: month_lookup}),
'title': "%s %s" % ( month_name, year_lookup),
},
@@ -256,7 +257,8 @@ def date_hierarchy(cl):
date_lookup_params = lookup_params.copy()
date_lookup_params.update({year_field: year_lookup, month_field: month_lookup})
days = get_dates('day', date_lookup_params)
- return { 'back':
+ return { 'show': True,
+ 'back':
{ 'link' : link({year_field: year_lookup}),
'title' : year_lookup
},
@@ -268,7 +270,8 @@ def date_hierarchy(cl):
date_lookup_params = lookup_params.copy()
date_lookup_params.update({year_field: year_lookup})
months = get_dates('month', date_lookup_params)
- return { 'back':
+ return { 'show' : True,
+ 'back':
{ 'link' : link({}),
'title': _('All dates')
},
@@ -278,7 +281,8 @@ def date_hierarchy(cl):
}
else:
years = get_dates('year', lookup_params)
- return { 'choices':
+ return { 'show': True,
+ 'choices':
[ { 'link': link( {year_field: year.year}),
'title': year.year } for year in years ]
}
diff --git a/django/core/meta/fields.py b/django/core/meta/fields.py
index a9589270f1..93a13f22cf 100644
--- a/django/core/meta/fields.py
+++ b/django/core/meta/fields.py
@@ -59,20 +59,7 @@ def manipulator_validator_unique(f, opts, self, field_data, all_data):
return
raise validators.ValidationError, "%s with this %s already exists." % (capfirst(opts.verbose_name), f.verbose_name)
-# A guide to Field parameters:
-#
-# * name: The name of the field specifed in the model.
-# * attname: The attribute to use on the model object. This is the same as
-# "name", except in the case of ForeignKeys, where "_id" is
-# appended.
-# * db_column: The db_column specified in the model (or None).
-# * column: The database column for this field. This is the same as
-# "attname", except if db_column is specified.
-#
-# Code that introspects values, or does other dynamic things, should use
-# attname. For example, this gets the primary key value of object "obj":
-#
-# getattr(obj, opts.pk.attname)
+
class BoundField(object):
def __init__(self, field, field_mapping, original):
self.field = field
@@ -92,6 +79,22 @@ class BoundField(object):
def __repr__(self):
return "BoundField:(%s, %s)" %( self.field.name, self.form_fields)
+
+# A guide to Field parameters:
+#
+# * name: The name of the field specifed in the model.
+# * attname: The attribute to use on the model object. This is the same as
+# "name", except in the case of ForeignKeys, where "_id" is
+# appended.
+# * db_column: The db_column specified in the model (or None).
+# * column: The database column for this field. This is the same as
+# "attname", except if db_column is specified.
+#
+# Code that introspects values, or does other dynamic things, should use
+# attname. For example, this gets the primary key value of object "obj":
+#
+# getattr(obj, opts.pk.attname)
+
class Field(object):
# Designates whether empty strings fundamentally are allowed at the
@@ -224,7 +227,7 @@ class Field(object):
if self.maxlength and not self.choices: # Don't give SelectFields a maxlength parameter.
params['maxlength'] = self.maxlength
if isinstance(self.rel, ManyToOne):
- params['member_name'] = name_prefix + self.get_db_column()
+ params['member_name'] = name_prefix + self.attname
if self.rel.raw_id_admin:
field_objs = self.get_manipulator_field_objs()
params['validator_list'].append(curry(manipulator_valid_rel_key, self, manipulator))
@@ -312,7 +315,8 @@ class Field(object):
if self.choices:
return first_choice + list(self.choices)
rel_obj = self.rel.to
- return first_choice + [(getattr(x, rel_obj.pk.attlist), str(x)) for x in rel_obj.get_model_module().get_list(**self.rel.limit_choices_to)]
+ return first_choice + [(getattr(x, rel_obj.pk.attname), str(x))
+ for x in rel_obj.get_model_module().get_list(**self.rel.limit_choices_to)]
def get_choices_default(self):
if(self.radio_admin):
@@ -322,7 +326,7 @@ class Field(object):
def _get_val_from_obj(self, obj):
if obj:
- return getattr(obj, self.column)
+ return getattr(obj, self.attname)
else:
return self.get_default()
@@ -332,7 +336,7 @@ class Field(object):
"flattened" string values for the admin view. Obj is the instance to extract the
values from.
"""
- return { self.get_db_column(): self._get_val_from_obj(obj)}
+ return { self.attname : self._get_val_from_obj(obj)}
def get_follow(self, override=None):
if override != None:
@@ -716,7 +720,7 @@ class ForeignKey(Field):
if not self.blank and not self.rel.raw_id_admin and self.choices:
choice_list = self.get_choices_default()
if len(choice_list) == 2:
- return { self.name : choice_list[1][0] }
+ return { self.attname : choice_list[1][0] }
return Field.flatten_data(self, follow, obj)
class ManyToManyField(Field):
@@ -766,7 +770,7 @@ class ManyToManyField(Field):
new_data = {}
if obj:
get_list_func = getattr(obj, 'get_%s_list' % self.rel.singular)
- instance_ids = [getattr(instance, self.rel.to.pk.column) for instance in get_list_func()]
+ instance_ids = [getattr(instance, self.rel.to.pk.attname) for instance in get_list_func()]
if self.rel.raw_id_admin:
new_data[self.name] = ",".join([str(id) for id in instance_ids])
else:
diff --git a/django/core/template/__init__.py b/django/core/template/__init__.py
index 8bea26b658..d0ec9c8dc1 100644
--- a/django/core/template/__init__.py
+++ b/django/core/template/__init__.py
@@ -658,7 +658,6 @@ filter_raw_string = r"""
}
filter_raw_string = filter_raw_string.replace("\n", "").replace(" ", "")
-
filter_re = re.compile(filter_raw_string)
class RegexFilterParser(object):