1
0
mirror of https://github.com/django/django.git synced 2025-07-05 10:19:20 +00:00

Fixes for attname & date hierarchy

git-svn-id: http://code.djangoproject.com/svn/django/branches/new-admin@1159 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Robert Wittams 2005-11-11 00:11:15 +00:00
parent dbaf9c6f8d
commit 3865e76ee7
4 changed files with 36 additions and 27 deletions

View File

@ -1,3 +1,4 @@
{% if show %}
<div class="xfull">
<ul class="toplinks">
{% if back %}<li class="date-back"><a href="{{back.link}}">&lsaquo; {{back.title}}</a></li>{% endif %}
@ -6,3 +7,4 @@
{% endfor %}
</ul><br class="clear" />
</div>
{% endif %}

View File

@ -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 ]
}

View File

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

View File

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