Добавьте функциональность к Django FlatPages, не изменяя исходного Django App

только для записи (потому что у меня ничего не получалось):

У нас была только сетчатка-графика в наших проектах. После обновления до XCode 5 все изображения имели белый вопросительный знак (только в Interface Builder, а не в Simulator). Мы переключили источник изображения на non-retina, что решило проблему!

enter image description here

Использование btn-category-6.jpg решило проблему!

14
задан 20 June 2009 в 11:54
поделиться

2 ответа

Ваш подход хорош - вы просто не видите результата, потому что старая модель плоской страницы зарегистрирована в админке, а новая - нет. Вот что вы можете сделать в своем новом приложении admin.py (используя менее двусмысленное именование, чем то, что у вас есть выше):

from django.contrib import admin
from django.contrib.flatpages.admin import FlatPageAdmin
from django.contrib.flatpages.forms import FlatpageForm
from django.contrib.flatpages.models import FlatPage

from models import ExtendedFlatPage

class ExtendedFlatPageForm(FlatpageForm):
    class Meta:
        model = ExtendedFlatPage

class ExtendedFlatPageAdmin(FlatPageAdmin):
    form = ExtendedFlatPageForm
    fieldsets = (
        (None, {'fields': ('url', 'title', 'content', 'sites', 'order')}),
    )     

admin.site.unregister(FlatPage)
admin.site.register(ExtendedFlatPage, ExtendedFlatPageAdmin)

Очевидно, здесь происходит несколько вещей, но, что наиболее важно, модель FlatPage не регистрируется, а Вместо нее регистрируется модель ExtendedFlatPage.

21
ответ дан 1 December 2019 в 09:33
поделиться

И метод в вашем сообщении не работает, потому что ...?

Если по какой-то причине вам действительно нужно возиться с встроенный класс FlatPage и отредактировать его динамически, вы можете подключиться к сигналу class_prepared:

http: //docs.djangoproject. com / en / dev / ref / signal / # class-prepare

Edit

Вот как это сделать с помощью 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)

Поместите это, скажем, в 'signal.py' в тот же каталог в качестве вашего settings.py и добавьте «сигналы» в начало (это важно, чтобы гарантировать своевременную установку обработчика сигналов) списка INSTALLED_APPS.

Однако это все равно выиграло ». t получить поле, отображаемое в Admin, потому что для FlatPages есть собственный класс ModelAdmin, который явно перечисляет поля. Поэтому после того, как он будет зарегистрирован в приложении Flatpages, вам нужно будет где-нибудь отменить его регистрацию (admin.site.unregister) и зарегистрировать собственный ModelAdmin.

в том же каталоге, что и ваш settings.py, и добавьте 'сигналы' в начало (это важно, чтобы гарантировать своевременную установку обработчика сигналов) списка INSTALLED_APPS.

Однако, это все равно не приведет к отображению поля в Admin, потому что для FlatPages есть собственный класс ModelAdmin, который явно перечисляет поля. Поэтому после того, как он будет зарегистрирован в приложении Flatpages, вам нужно будет где-нибудь отменить его регистрацию (admin.site.unregister) и зарегистрировать собственный ModelAdmin.

в том же каталоге, что и ваш settings.py, и добавьте 'сигналы' в начало (это важно, чтобы гарантировать своевременную установку обработчика сигналов) списка INSTALLED_APPS.

Однако, это все равно не приведет к отображению поля в Admin, потому что для FlatPages есть собственный класс ModelAdmin, который явно перечисляет поля. Поэтому после того, как он будет зарегистрирован в приложении Flatpages, вам нужно будет где-нибудь отменить его регистрацию (admin.site.unregister) и зарегистрировать собственный ModelAdmin.

sa пользовательский класс ModelAdmin для FlatPages, который явно перечисляет поля. Поэтому после того, как он будет зарегистрирован в приложении Flatpages, вам нужно будет где-нибудь отменить его регистрацию (admin.site.unregister) и зарегистрировать собственный ModelAdmin.

sa пользовательский класс ModelAdmin для FlatPages, который явно перечисляет поля. Поэтому после того, как он будет зарегистрирован в приложении Flatpages, вам нужно будет где-нибудь отменить его регистрацию (admin.site.unregister) и зарегистрировать собственный ModelAdmin.

7
ответ дан 1 December 2019 в 09:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: