2010-12-22 2 views
3

django의 확장 된 플랫 페이지에서 필드에 액세스하는 방법은 무엇입니까? 관리자에django의 확장 된 플랫 페이지의 필드에 대한 액세스

class ExtendedFlatPage(FlatPage): 
    teaser = CharField(max_length=150) 

class ExtendedFlatPageForm(FlatpageForm): 
    teaser = CharField(max_length=150) 
    class Meta: 
     model = ExtendedFlatPage 

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

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

그리고 창조 괜찮 :
나는이 썼다. 그러나 flatpages/default.html에서 나는 이것을 시도했다 :

<html> 
<body> 
<h1>{{ flatpage.title }}</h1> 
<strong>{{ flatpage.teaser }}</strong> 
<p>{{ flatpage.content }}</p> 
</body> 
</html> 

그리고 flatpage.teaser가 없었다! 뭐가 잘못 되었 니?

+1

FlatpageFallbackMiddleware는 여전히 기본 Flatpage 모델을 사용한다고 생각합니다. 또한 당신의 접근법은 [Multi-table inheritance] (http://docs.djangoproject.com/en/dev/topics/db/models/#multi-table-inheritance)를 사용할 것입니다. 이것은 확장 된 모델을 위해 생성 된 두 개의 테이블을 가지고 있음을 의미합니다. 귀하의 질의를 덜 효율적으로 만듭니다. –

+0

네, 두 번째 테이블과 오른쪽 값을 보았습니다. 질문은 flatpage 템플릿의 새 필드에 어떻게 액세스 할 수 있습니까? – Stan

+1

일반 FlatPage 대신 확장 모델을 사용하는 사용자 지정 미들웨어를 만들 수 있습니다. FlatpageFallbackMiddleware 코드를 살펴보면, 자신이 필요로하는 패키지를 쉽게 수정할 수 있습니다. –

답변

0

확실히 평범한 FlatPage가 아닌 올바른 개체를 템플릿에 전달하고 있습니까?

또한 코드 붙여 넣기가 다른 파일에서 나오지 않고 가져 오기를 표시하지 않으면 모델에 django.models의 필드와 django.forms의 양식이 있어야합니다. 당신은 작은 템플릿에 양식을 보여주지 않으므로 그게 문제라고 생각하지 않습니다 ...하지만 당신의 모델 '티저'가 django.models.CharField 대신 django.forms.CharField에서 온다면 ... you 아마 그것을 볼 수 없습니다. 하지만 관리자라면 괜찮습니까?

템플릿을 렌더링했는데 비슷한 템플릿이 아닌 것은 확실합니까? (당신은 최소한 < 블록 인용 부호 > 쌍이 있어야합니다).

장고 쉘에서 시도, 개체를 얻을 수 (foo는 = ExtendedFlatPage.objects.get (ID = 1) 또는 이와 유사한 것)과에 foo.teaser을 ...

+0

그는 평면 객체를 위해 미들웨어를 사용하고 있기 때문에 객체를 실제로 전달하지는 않습니다. 미들웨어는 확장 된 평면 객체를 사용하도록 말하지 않았으므로 기본 평면 페이지 객체를 가져옵니다. – Rasiel

4

예, 수수께끼가 FlatpageFallbackMiddleware을 언급 한 바와 같이 기본 FlatPage 모델 인스턴스를 템플릿에 전달합니다. 그러나 케이스 템플릿 변수 {{ flatpage }}도 여기 django-docs에 설명 된대로 ExtendedFlatPage 인스턴스인지 기억합니다.

{{ flatpage.extendedflatpage.teaser }} 대신 {{ flatpage.teaser }} :

그래서 당신이 사용해야하는 ExtendedFlatPage로 flatpage을 치료한다.

관련 문제