Opened 8 years ago

Last modified 8 years ago

#27264 closed Bug

Model Meta is overwriten by abstract parent class — at Version 1

Reported by: luxcem Owned by: nobody
Component: Database layer (models, ORM) Version: 1.10
Severity: Normal Keywords: models meta inheritance
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by luxcem)

Hi, it seems to be an actual django bug, the example at the address
https://docs.djangoproject.com/en/1.10/topics/db/models/#meta-inheritance
does not work correctly,


  from django.db import models

    class BaseCategory(models.Model):
        title = models.CharField(max_length=100)

        class Meta:
            abstract = True
            ordering = ['title']

    class Category(BaseCategory):

        name = models.CharField(max_length=100)

        class Meta(BaseCategory.Meta):
            ordering = ['name']
            db_table = 'samble'

Category.Meta.ordering is equal to title, Category.Meta.db_table is
undefined and Category.Meta.abstract is correctly set to false, in fact
Category.Meta is of type BaseCategory.Meta.

A stranger behavior is when abstract = True is added to the subclass :


  class Category(BaseCategory):

        name = models.CharField(max_length=100)

        class Meta(BaseCategory.Meta):
            abstract = True
            ordering = ['name']
            db_table = 'sample'

Now the behavior is correct (if abstract was not set) :
Category.Meta.db_table = 'sample', Category.Meta.ordering = name but
Category.Meta.abstract = False, Category.Meta is of type Category.Meta

So additionally it is impossible to create an abstract class inheriting
an abstract class.

Tested with django 1.8, 1.9, 1.10, 1.10.1 and python 2.7, 3.4

Change History (1)

comment:1 by luxcem, 8 years ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.
Back to Top