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:
parent
dbaf9c6f8d
commit
3865e76ee7
@ -1,3 +1,4 @@
|
||||
{% if show %}
|
||||
<div class="xfull">
|
||||
<ul class="toplinks">
|
||||
{% if back %}<li class="date-back"><a href="{{back.link}}">‹ {{back.title}}</a></li>{% endif %}
|
||||
@ -6,3 +7,4 @@
|
||||
{% endfor %}
|
||||
</ul><br class="clear" />
|
||||
</div>
|
||||
{% endif %}
|
@ -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 ]
|
||||
}
|
||||
|
@ -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:
|
||||
|
@ -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):
|
||||
|
Loading…
x
Reference in New Issue
Block a user