Yo uso Django 1.10. Tengo la siguiente estructura modelo:
class GenericPage(models.Model): """Abstract page, other pages inherit from it.""" book = models.ForeignKey('Book', on_delete=models.CASCADE) class Meta: abstract = True class GenericColorPage(models.Model): """Abstract page that is sketchable and colorable, other pages inherit from it.""" sketched = models.BooleanField(default=False) colored = models.BooleanField(default=False) class Meta: abstract = True class GenericBookPage(GenericColorPage): """A normal book page, with a number. Needs to be storyboarded and edited.""" ### #various additional fields ### class Meta: # unique_together = (('page_number', 'book'),) # impedes movement of pages ordering = ('-book', '-page_number',) abstract = True objects = BookPageManager() # the manager for book pages class BookPage(GenericBookPage): """Just a regular book page with text (that needs to be proofread)""" proofread = models.BooleanField(default=False)Además, un extracto de Admin:
class BookPageAdmin(admin.ModelAdmin): # fields NOT to show in Edit Page. list_display = ('__str__', 'page_name', 'sketched', 'colored', 'edited', 'proofread',) list_filter = ('book',) readonly_fields = ('page_number',) # valid page number is assigned via overridden save() in model actions = ['delete_selected',] Intenté hacer ./manage.py makemigrations pero arroja los siguientes errores:
<class 'progress.admin.BookPageAdmin'>: (admin.E116) The value of 'list_filter[0]' refers to 'book', which does not refer to a Field. progress.BookPage: (models.E015) 'ordering' refers to the non-existent field 'book'. En el pasado, cuando no usaba los resúmenes y simplemente ponía todo en el modelo BookPage , todo funcionaba bien. Pero parece que Meta y Admin no ven los campos en las clases principales. ¿Me estoy perdiendo de algo? ¿Hay alguna manera de hacer que lean campos de padres abstractos?
En el pasado, cuando no usaba los resúmenes y simplemente ponía todo en el modelo BookPage, todo funcionaba bien.
Por supuesto, funcionó bien porque puso todo dentro BookPage que no es una clase abstracta, lo que significa que se creará la tabla (y, por lo tanto, los campos).
Pero parece que Meta y Admin no ven los campos en las clases principales. ¿Me estoy perdiendo de algo?
Te estás perdiendo el hecho de que ninguno de tus modelos hereda del modelo abstracto GenericPage . Por lo tanto, el campo del book nunca se crea.
¿Hay alguna manera de hacer que lean campos de padres abstractos?
Debe crear/modificar un modelo que herede de un modelo abstracto. Tal vez, haz esto:
class GenericBookPage(GenericColorPage, GenericPage): lo que le permite heredar los campos GenericColorPage y GenericPage . Cuando digo heredar me refiero a cuando se ejecuta el comando de migrate para crear realmente la tabla de la base de datos y las columnas relevantes (campos del modelo).