Opened 11 years ago

Last modified 3 years ago

#21135 new New feature

Admin: Support for editing OneToOne related models in RELATED model

Reported by: Jonas H. Owned by: nobody
Component: contrib.admin Version: dev
Severity: Normal Keywords:
Cc: jonas-django@…, kitsunde@…, Petr Přikryl Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

Consider these models:

class Person(models.Model):
  address = models.OneToOneField("Address")

class Organization(models.Model):
  address = models.OneToOneField("Address")

class Building(models.Model):
  address = models.OneToOneField("Address")

Currently it's not possible to have a different ModelAdmin for each of the above models because the ModelAdmin.inlines property works a *reversed* manner.

Using the new feature would look like this (same AddressAdmin for every model)

class AddressAdmin(admin.TabularInline):
  model = Address

class PersonAdmin(admin.ModelAdmin):
  inlines = [AddressAdmin]

class OrganizationAdmin(admin.ModelAdmin):
  inlines = [AddressAdmin]

class BuildingAdmin(admin.ModelAdmin):
  inlines = [AddressAdmin]

or even like this (different AddressAdmin)

class PersonAddressAdmin(admin.TabularInline):
  model = Address

class OrganizationAddressAdmin(admin.TabularInline):
  model = Address

class BuildingAddressAdmin(admin.TabularInline):
  model = Address

class PersonAdmin(admin.ModelAdmin):
  inlines = [PersonAddressAdmin]

class OrganizationAdmin(admin.ModelAdmin):
  inlines = [OrganizationAddressAdmin]

class BuildingAdmin(admin.ModelAdmin):
  inlines = [BuildingAddressAdmin]

Change History (4)

comment:1 by Jonas H., 11 years ago

Cc: jonas-django@… added

comment:2 by Tim Graham, 11 years ago

Triage Stage: UnreviewedAccepted
Version: 1.5master

A better solution may be to use model inheritance and proxy models to achieve what you are trying to accomplish.

Here's what Malcolm had to say in an old thread on django-users:

Maybe you could knock up a patch to make this work and maybe it's
worthwhile (I don't really have a strong opinion either way, beyond
thinking that there's really no end to people twisting the admin
interface beyond intended usage and perhaps the should re-evaluate their
use-cases). This is "scratch your own itch" territory, I suspect.

I agree with the above.

I also found some possible code on djangosnipppets. Tentatively accepting the ticket.

comment:3 by Kit Sunde, 8 years ago

Cc: kitsunde@… added

comment:4 by Petr Přikryl, 3 years ago

Cc: Petr Přikryl added
Note: See TracTickets for help on using tickets.
Back to Top