I sposób w swoim poście nie działa, ponieważ ...?
Jeśli z jakiegoś powodu naprawdę trzeba bawić z wbudowanym klasy FlatPage i edytować go dynamicznie, można podłączyć do class_prepared sygnału:
http://docs.djangoproject.com/en/dev/ref/signals/#class-prepared
Edytuj
Oto jak to zrobić z klasą: przygotowano:
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)
Umieść to w, powiedzmy, "signals.py" w tym samym katalogu, co plik settings.py, i dodaj 'sygnały' do top (jest to ważne, aby upewnić się, że program obsługi sygnału zostanie zainstalowany w czasie) listę INSTALLED_APPS.
Jednak to nadal nie spowoduje wyświetlenia pola w Admin, ponieważ istnieje niestandardowa klasa ModelAdmin dla FlatPages, która wyraźnie wymienia pola. Po zarejestrowaniu się w aplikacji flatpages musisz ją gdzieś wyrejestrować (admin.site.unregister) i zarejestrować swój własny ModelAdmin.
Wielkie dzięki! Sądzę, że tego właśnie szukałem. –
Należy pamiętać, że to podejście nie będzie działać z domyślnym FlatpageFallbackMiddleware - zwróci instancje oryginalnego modelu Flatpage, a nie rozszerzenia. Musisz więc napisać własną wersję lub użyć własnego adresu URL/widoku. Ponadto masz teraz dwie tabele, w których tak naprawdę tylko jedna jest potrzebna, co skutkuje mniej wydajnymi zapytaniami.Podsumowując, polecam napisać własną aplikację płaską od zera lub używając metody class_prepared do monkeypatch w polu, zamiast używać dziedziczenia. –