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):