Suppose we have the following models:
{{{#!python
from django.db import models
class Orderable(models.Model):
sort_order = models.IntegerField(null=True, blank=True)
class Meta:
abstract = True
ordering = ['sort_order']
class Foo(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Meta:
verbose_name = 'foo'
verbose_name_plural = 'foos'
class Bar(Orderable, models.Model):
foo = models.ForeignKey(Foo, blank=True, null=True,
on_delete=models.CASCADE)
name = models.CharField(max_length=50)
def __str__(self):
return '{}-{}'.format(self.name, self.sort_order)
class Meta:
verbose_name = 'bar'
verbose_name_plural = 'bars'
# ordering = ['sort_order'] # needs to be explicitly set to
effect admin inline ordering
}}}
and the following admin definition:
{{{#!python
from django.contrib import admin
from metainheritance.models import Foo, Bar
class BarInline(admin.StackedInline):
model = Bar
fields = ['foo', 'name', 'sort_order']
extra = 0
class FooAdmin(admin.ModelAdmin):
inlines = [BarInline]
admin.site.register(Foo, FooAdmin)
}}}
Then BarInline objects in the admin interface will only be ordered by
```sort_order``` if it is explicitly defined on Bar.Meta.
In the attached project, there is a custome management command ```python
manage.py create_data``` to initialize the database.
--
Ticket URL: <https://code.djangoproject.com/ticket/29354>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* Attachment "meta_inheritance_test.zip" added.
Test project that illustrates the problem
* cc: felixxm (added)
Comment:
IMO `Bar.Meta` should inherit from `Orderable.Meta` (please see
https://docs.djangoproject.com/en/2.0/topics/db/models/#meta-inheritance).
--
Ticket URL: <https://code.djangoproject.com/ticket/29354#comment:1>
* status: new => closed
* resolution: => invalid
Comment:
That analysis looks correct to me.
--
Ticket URL: <https://code.djangoproject.com/ticket/29354#comment:2>