Opened 13 years ago

Last modified 5 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., 13 years ago

Cc: jonas-django@… added

comment:2 by Tim Graham, 13 years ago

Triage Stage: Unreviewed → Accepted
Version: 1.5 → master

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, 10 years ago

Cc: kitsunde@… added

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

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