Et la méthode dans votre post ne fonctionne pas parce que ...?
Si pour une raison quelconque, vous vraiment besoin de jouer avec la classe builtin flatpage et modifier dynamiquement, vous pouvez accrocher au signal class_prepared:
http://docs.djangoproject.com/en/dev/ref/signals/#class-prepared
Modifier
Voici comment vous le feriez avec un class_prepared:
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)
Mettez ceci dans, par exemple, 'signals.py' dans le même répertoire que votre settings.py, et ajoutez 'signals' au top (ceci est important, pour s'assurer que le gestionnaire de signal est installé à temps) de la liste INSTALLED_APPS. Toutefois, le champ ne s'affiche toujours pas dans Admin, car il existe une classe ModelAdmin personnalisée pour FlatPages qui répertorie explicitement les champs. Ainsi, une fois enregistré dans l'application flatpages, vous devrez l'annuler (admin.site.unregister) et enregistrer votre ModelAdmin.
Merci beaucoup! Je suppose que c'est ce que je cherchais. –
Gardez à l'esprit que cette approche ne fonctionnera pas avec FlatpageFallbackMiddleware par défaut - elle retournera des instances du modèle Flatpage original, pas votre extension. Vous devrez donc écrire votre propre version ou utiliser votre propre URL/vue. En outre, vous disposez maintenant de deux tables dont une seule est nécessaire, ce qui entraîne des requêtes moins efficaces.Dans l'ensemble, je recommande d'écrire votre propre application flatpage à partir de zéro, ou en utilisant l'approche class_prepared pour monkeypatch le champ, plutôt que d'utiliser l'héritage. –