Opened 8 years ago
Last modified 8 years ago
#27264 closed Bug
Model Meta is overwriten by abstract parent class — at Initial Version
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
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