문제

Django FlatPage 데이터베이스 모델에 필드를 추가하고 싶지만 원래 응용 프로그램을 편집하지 않고이 기능을 확장하는 방법을 실제로 모릅니다.

내가하고 싶은 것은 다음 필드를 모델에 추가하는 것입니다.


from django.db import models
from django.contrib.flatpages.models import FlatPage as FlatPageOld

class FlatPage(FlatPageOld):
    order = models.PositiveIntegerField(unique=True)

이것을 플랫 페이지 모델에 추가하려면 어떻게해야합니까?

미리 감사드립니다

도움이 되었습니까?

해결책

귀하의 접근 방식은 괜찮습니다. 이전 플랫 페이지 모델이 관리자에 등록되어 있고 새로운 모델이 아니기 때문에 결과를 보지 못합니다. 다음은 새로운 앱의 관리자가 할 수있는 일입니다 (위의 것보다 덜 모호한 이름을 사용).

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)

분명히 여기에는 몇 가지 일이 일어나고 있지만 가장 중요한 것은 플랫 페이지 모델이 등록되지 않고 확장 플래트 페지 모델이 그 자리에 등록되고 있습니다.

다른 팁

그리고 게시물의 방법은 작동하지 않기 때문에 ...?

어떤 이유로 든 진짜 내장 플랫 페이지 클래스와 함께 바이올린을 사용하고 동적으로 편집해야합니다. Class_prepared 신호에 연결할 수 있습니다.

http://docs.djangoproject.com/en/dev/ref/signals/#class-prepared

편집하다

다음은 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)

Settings.py와 동일한 디렉토리에 'Signals.py'를 넣고 '신호'를 추가하십시오. 맨 위 설치된_apps 목록의 (신호 핸들러가 제 시간에 설치되도록하는 것이 중요합니다).

그러나 필드를 명시 적으로 나열하는 플랫 페이지에 대한 사용자 정의 ModelAdmin 클래스가 있기 때문에 여전히 필드가 관리자에 표시되지 않습니다. 따라서 FlatPages 앱에 등록 된 후에는 어딘가에 등록하지 않고 (admin.site.unregister) 자신의 ModelAdmin을 등록해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top