Fixed #211 -- edit_inline_type is deprecated, in favor of edit_inline itself. For example, instead of 'edit_inline=True, edit_inline_type=meta.TABULAR', use 'edit_inline=meta.TABULAR'.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@440 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Adrian Holovaty 2005-08-09 21:08:00 +00:00
parent e79eb09f21
commit 4f00611f74
6 changed files with 31 additions and 25 deletions

View File

@ -291,7 +291,7 @@ class Options:
# relationship we're adding. # relationship we're adding.
link_field = copy.copy(core.RelatedLink._meta.get_field('object_id')) link_field = copy.copy(core.RelatedLink._meta.get_field('object_id'))
link_field.rel = ManyToOne(self.get_model_module().Klass, 'related_links', 'id', link_field.rel = ManyToOne(self.get_model_module().Klass, 'related_links', 'id',
num_in_admin=3, min_num_in_admin=3, edit_inline=True, edit_inline_type=TABULAR, num_in_admin=3, min_num_in_admin=3, edit_inline=TABULAR,
lookup_overrides={ lookup_overrides={
'content_type__package__label__exact': self.app_label, 'content_type__package__label__exact': self.app_label,
'content_type__python_module_name__exact': self.module_name 'content_type__python_module_name__exact': self.module_name

View File

@ -15,7 +15,7 @@ HORIZONTAL, VERTICAL = 1, 2
BLANK_CHOICE_DASH = [("", "---------")] BLANK_CHOICE_DASH = [("", "---------")]
BLANK_CHOICE_NONE = [("", "None")] BLANK_CHOICE_NONE = [("", "None")]
# Values for Relation.edit_inline_type. # Values for Relation.edit_inline.
TABULAR, STACKED = 1, 2 TABULAR, STACKED = 1, 2
RECURSIVE_RELATIONSHIP_CONSTANT = 'self' RECURSIVE_RELATIONSHIP_CONSTANT = 'self'
@ -531,13 +531,18 @@ class ForeignKey(Field):
kwargs['name'] = kwargs.get('name', to_name + '_id') kwargs['name'] = kwargs.get('name', to_name + '_id')
kwargs['verbose_name'] = kwargs.get('verbose_name', to._meta.verbose_name) kwargs['verbose_name'] = kwargs.get('verbose_name', to._meta.verbose_name)
rel_name = rel_name or to_name rel_name = rel_name or to_name
if kwargs.has_key('edit_inline_type'):
import warnings
warnings.warn("edit_inline_type is deprecated. Use edit_inline instead.")
kwargs['edit_inline'] = kwargs.pop('edit_inline_type')
kwargs['rel'] = ManyToOne(to, rel_name, to_field, kwargs['rel'] = ManyToOne(to, rel_name, to_field,
num_in_admin=kwargs.pop('num_in_admin', 3), num_in_admin=kwargs.pop('num_in_admin', 3),
min_num_in_admin=kwargs.pop('min_num_in_admin', None), min_num_in_admin=kwargs.pop('min_num_in_admin', None),
max_num_in_admin=kwargs.pop('max_num_in_admin', None), max_num_in_admin=kwargs.pop('max_num_in_admin', None),
num_extra_on_change=kwargs.pop('num_extra_on_change', 1), num_extra_on_change=kwargs.pop('num_extra_on_change', 1),
edit_inline=kwargs.pop('edit_inline', False), edit_inline=kwargs.pop('edit_inline', False),
edit_inline_type=kwargs.pop('edit_inline_type', STACKED),
related_name=kwargs.pop('related_name', None), related_name=kwargs.pop('related_name', None),
limit_choices_to=kwargs.pop('limit_choices_to', None), limit_choices_to=kwargs.pop('limit_choices_to', None),
lookup_overrides=kwargs.pop('lookup_overrides', None), lookup_overrides=kwargs.pop('lookup_overrides', None),
@ -573,10 +578,15 @@ class OneToOneField(IntegerField):
kwargs['verbose_name'] = kwargs.get('verbose_name', 'ID') kwargs['verbose_name'] = kwargs.get('verbose_name', 'ID')
to_field = to_field or to._meta.pk.name to_field = to_field or to._meta.pk.name
rel_name = rel_name or to._meta.object_name.lower() rel_name = rel_name or to._meta.object_name.lower()
if kwargs.has_key('edit_inline_type'):
import warnings
warnings.warn("edit_inline_type is deprecated. Use edit_inline instead.")
kwargs['edit_inline'] = kwargs.pop('edit_inline_type')
kwargs['rel'] = OneToOne(to, rel_name, to_field, kwargs['rel'] = OneToOne(to, rel_name, to_field,
num_in_admin=kwargs.pop('num_in_admin', 0), num_in_admin=kwargs.pop('num_in_admin', 0),
edit_inline=kwargs.pop('edit_inline', False), edit_inline=kwargs.pop('edit_inline', False),
edit_inline_type=kwargs.pop('edit_inline_type', STACKED),
related_name=kwargs.pop('related_name', None), related_name=kwargs.pop('related_name', None),
limit_choices_to=kwargs.pop('limit_choices_to', None), limit_choices_to=kwargs.pop('limit_choices_to', None),
lookup_overrides=kwargs.pop('lookup_overrides', None), lookup_overrides=kwargs.pop('lookup_overrides', None),
@ -586,7 +596,7 @@ class OneToOneField(IntegerField):
class ManyToOne: class ManyToOne:
def __init__(self, to, name, field_name, num_in_admin=3, min_num_in_admin=None, def __init__(self, to, name, field_name, num_in_admin=3, min_num_in_admin=None,
max_num_in_admin=None, num_extra_on_change=1, edit_inline=False, edit_inline_type=STACKED, max_num_in_admin=None, num_extra_on_change=1, edit_inline=False,
related_name=None, limit_choices_to=None, lookup_overrides=None, raw_id_admin=False): related_name=None, limit_choices_to=None, lookup_overrides=None, raw_id_admin=False):
try: try:
self.to = to._meta self.to = to._meta
@ -596,8 +606,7 @@ class ManyToOne:
self.name, self.field_name = name, field_name self.name, self.field_name = name, field_name
self.num_in_admin, self.edit_inline = num_in_admin, edit_inline self.num_in_admin, self.edit_inline = num_in_admin, edit_inline
self.min_num_in_admin, self.max_num_in_admin = min_num_in_admin, max_num_in_admin self.min_num_in_admin, self.max_num_in_admin = min_num_in_admin, max_num_in_admin
self.num_extra_on_change = num_extra_on_change self.num_extra_on_change, self.related_name = num_extra_on_change, related_name
self.edit_inline_type, self.related_name = edit_inline_type, related_name
self.limit_choices_to = limit_choices_to or {} self.limit_choices_to = limit_choices_to or {}
self.lookup_overrides = lookup_overrides or {} self.lookup_overrides = lookup_overrides or {}
self.raw_id_admin = raw_id_admin self.raw_id_admin = raw_id_admin
@ -621,11 +630,11 @@ class ManyToMany:
class OneToOne(ManyToOne): class OneToOne(ManyToOne):
def __init__(self, to, name, field_name, num_in_admin=0, edit_inline=False, def __init__(self, to, name, field_name, num_in_admin=0, edit_inline=False,
edit_inline_type=STACKED, related_name=None, limit_choices_to=None, lookup_overrides=None, related_name=None, limit_choices_to=None, lookup_overrides=None,
raw_id_admin=False): raw_id_admin=False):
self.to, self.name, self.field_name = to._meta, name, field_name self.to, self.name, self.field_name = to._meta, name, field_name
self.num_in_admin, self.edit_inline = num_in_admin, edit_inline self.num_in_admin, self.edit_inline = num_in_admin, edit_inline
self.edit_inline_type, self.related_name = edit_inline_type, related_name self.related_name = related_name
self.limit_choices_to = limit_choices_to or {} self.limit_choices_to = limit_choices_to or {}
self.lookup_overrides = lookup_overrides or {} self.lookup_overrides = lookup_overrides or {}
self.raw_id_admin = raw_id_admin self.raw_id_admin = raw_id_admin

View File

@ -608,11 +608,11 @@ def _get_template(opts, app_label, add=False, change=False, show_delete=False, f
for rel_obj, rel_field in opts.get_inline_related_objects(): for rel_obj, rel_field in opts.get_inline_related_objects():
var_name = rel_obj.object_name.lower() var_name = rel_obj.object_name.lower()
field_list = [f for f in rel_obj.fields + rel_obj.many_to_many if f.editable and f != rel_field] field_list = [f for f in rel_obj.fields + rel_obj.many_to_many if f.editable and f != rel_field]
t.append('<fieldset class="module%s">\n' % ((rel_field.rel.edit_inline_type != meta.TABULAR) and ' aligned' or '')) t.append('<fieldset class="module%s">\n' % ((rel_field.rel.edit_inline != meta.TABULAR) and ' aligned' or ''))
view_on_site = '' view_on_site = ''
if change and hasattr(rel_obj, 'get_absolute_url'): if change and hasattr(rel_obj, 'get_absolute_url'):
view_on_site = '{%% if %s.original %%}<a href="/r/{{ %s.content_type_id }}/{{ %s.original.id }}/">View on site</a>{%% endif %%}' % (var_name, var_name, var_name) view_on_site = '{%% if %s.original %%}<a href="/r/{{ %s.content_type_id }}/{{ %s.original.id }}/">View on site</a>{%% endif %%}' % (var_name, var_name, var_name)
if rel_field.rel.edit_inline_type == meta.TABULAR: if rel_field.rel.edit_inline == meta.TABULAR:
t.append('<h2>%s</h2>\n<table>\n' % capfirst(rel_obj.verbose_name_plural)) t.append('<h2>%s</h2>\n<table>\n' % capfirst(rel_obj.verbose_name_plural))
t.append('<thead><tr>') t.append('<thead><tr>')
for f in field_list: for f in field_list:
@ -654,7 +654,7 @@ def _get_template(opts, app_label, add=False, change=False, show_delete=False, f
t.append('{%% for %s in form.%s %%}\n' % (var_name, rel_obj.module_name)) t.append('{%% for %s in form.%s %%}\n' % (var_name, rel_obj.module_name))
t.extend(hidden_fields) t.extend(hidden_fields)
t.append('{% endfor %}\n') t.append('{% endfor %}\n')
else: # edit_inline_type == STACKED else: # edit_inline == STACKED
t.append('{%% for %s in form.%s %%}' % (var_name, rel_obj.module_name)) t.append('{%% for %s in form.%s %%}' % (var_name, rel_obj.module_name))
t.append('<h2>%s #{{ forloop.counter }}</h2>' % capfirst(rel_obj.verbose_name)) t.append('<h2>%s #{{ forloop.counter }}</h2>' % capfirst(rel_obj.verbose_name))
if view_on_site: if view_on_site:

View File

@ -20,7 +20,7 @@ Throughout this reference, we'll refer to the following Poll application::
class Choice(meta.Model): class Choice(meta.Model):
fields = ( fields = (
meta.ForeignKey(Poll, edit_inline=True, edit_inline_type=meta.TABULAR, meta.ForeignKey(Poll, edit_inline=meta.TABULAR,
num_in_admin=10, min_num_in_admin=5), num_in_admin=10, min_num_in_admin=5),
meta.CharField('choice', maxlength=255, core=True), meta.CharField('choice', maxlength=255, core=True),
meta.IntegerField('votes', editable=False, default=0), meta.IntegerField('votes', editable=False, default=0),

View File

@ -316,16 +316,13 @@ Field Types
======================= ============================================================ ======================= ============================================================
Argument Description Argument Description
======================= ============================================================ ======================= ============================================================
``edit_inline`` If ``True``, this related object is edited ``edit_inline`` If not ``False``, this related object is edited
"inline" on the related object's page. This means "inline" on the related object's page. This means
that the object will not have its own admin that the object will not have its own admin
interface. interface. Use either ``meta.TABULAR`` or ``meta.STACKED``,
which, respectively, designate whether the inline-editable
``edit_inline_type`` This is either ``meta.TABULAR`` or objects are displayed as a table or as a "stack" of
``meta.STACKED`` and controls whether the inline fieldsets.
editable objects are displayed as a table or as
a "stack" of fieldsets. Defaults to
``meta.STACKED``.
``limit_choices_to`` A dictionary of lookup arguments and values (see ``limit_choices_to`` A dictionary of lookup arguments and values (see
the `Database API reference`_) that limit the the `Database API reference`_) that limit the

View File

@ -242,7 +242,7 @@ Poll object. Let's make that happen.
Remove the ``admin`` for the Choice model. Then, edit the ``ForeignKey(Poll)`` Remove the ``admin`` for the Choice model. Then, edit the ``ForeignKey(Poll)``
field like so:: field like so::
meta.ForeignKey(Poll, edit_inline=True, num_in_admin=3), meta.ForeignKey(Poll, edit_inline=meta.STACKED, num_in_admin=3),
This tells Django: "Choice objects are edited on the Poll admin page. By This tells Django: "Choice objects are edited on the Poll admin page. By
default, provide enough fields for 3 Choices." default, provide enough fields for 3 Choices."
@ -274,10 +274,10 @@ One small problem, though. It takes a lot of screen space to display all the
fields for entering related Choice objects. For that reason, Django offers an fields for entering related Choice objects. For that reason, Django offers an
alternate way of displaying inline related objects:: alternate way of displaying inline related objects::
meta.ForeignKey(Poll, edit_inline=True, num_in_admin=3, edit_inline_type=meta.TABULAR), meta.ForeignKey(Poll, edit_inline=meta.TABULAR, num_in_admin=3),
With that ``edit_inline_type=meta.TABULAR``, the related objects are displayed With that ``edit_inline=meta.TABULAR`` (instead of ``meta.STACKED``), the
in a more compact, table-based format: related objects are displayed in a more compact, table-based format:
.. image:: http://media.djangoproject.com/img/doc/tutorial/admin12.png .. image:: http://media.djangoproject.com/img/doc/tutorial/admin12.png
:alt: Add poll page now has more compact choices :alt: Add poll page now has more compact choices