Und die Methode in Ihrem Beitrag, weil nicht funktioniert ...?
Wenn aus irgendeinem Grund Sie wirklich mit dem eingebauten Flat Klasse zu Geige brauchen und es dynamisch bearbeiten, können Sie das class_prepared Signal Haken:
http://docs.djangoproject.com/en/dev/ref/signals/#class-prepared
bearbeiten
Hier wie Sie es mit einem class_prepared tun würden:
from django.db.models.signals import class_prepared
from django.db import models
def alter_flatpages(sender, **kwargs):
if sender.__module__ == 'django.contrib.flatpages.models' and sender.__name__ == 'FlatPage':
order = models.IntegerField()
order.contribute_to_class(sender, 'order')
class_prepared.connect(alter_flatpages)
Setzen Sie diese, sagen wir, 'signals.py' in das gleiche Verzeichnis wie Ihre settings.py, und fügen Sie 'Signale' zu top hinzu (dies ist wichtig, um sicherzustellen, dass der Signal-Handler rechtzeitig installiert wird) die INSTALLED_APPS-Liste.
Das Feld wird jedoch immer noch nicht in Admin angezeigt, da es eine benutzerdefinierte ModelAdmin-Klasse für FlatPages gibt, die die Felder explizit auflistet. Nachdem es in der App flatpages registriert wurde, müssen Sie es irgendwo aufheben (admin.site.unregister) und ein ModelAdmin registrieren.
Vielen Dank! Ich denke, das ist, was ich gesucht habe. –
Beachten Sie, dass dieser Ansatz nicht mit der FlatpageFallbackMiddleware-Standardfunktion funktioniert - er gibt Instanzen des ursprünglichen Flatpage-Modells zurück, nicht Ihre Erweiterung. Sie müssen also Ihre eigene Version davon schreiben oder Ihre eigene URL/Ansicht verwenden. Außerdem haben Sie jetzt zwei Tabellen, in denen wirklich nur eine benötigt wird, was zu weniger effizienten Abfragen führt.Alles in allem würde ich empfehlen, Ihre eigene Flatseite-App von Grund auf neu zu schreiben, oder den class_prepared-Ansatz zu verwenden, um das Feld in moneypatch zu setzen, anstatt Vererbung zu verwenden. –