2017-12-24 13 views
0

http://docs.wagtail.io/en/v1.13.1/getting_started/tutorial.html할미새 일반 갤러리 구현 및

튜토리얼 인트로에게 블로그 갤러리 기능에 Getting_Started 할미새 OneToOneField, 다음과 같이 구현합니다

class BlogPage(Page): 
    ... 

class BlogPageGalleryImage(Orderable) 
    page = ParentalKey(BlogPage, related_name='gallery_images') 
    image = ... 

이 방법은 BlogPage 모델 그러나 BlogPageGalleryImage 커플을 작동합니다. 제 의도는 모든 모델 (페이지)에 포함될 수있는 일반적인 갤러리 모델을 만드는 것입니다. 아이디어는 중간 갤러리 모델을 사용하고 있습니다 :

class BlogPage(Page): 
    gallery = models.OneToOneField(Gallery, on_delete=models.SET_NULL, null=True) 
    ... 

class Gallery(Page): 
    pass 

class GalleryImage(Orderable): 
    gallery = ParentalKey(Gallery, related_name='images') 

그런 다음 코드에서, 우리는 blog.gallery.images를 통해 이미지를 얻을 수 있습니다.

내 질문은 블로그 페이지 개체를 편집 할 때 갤러리 개체 (OneToOneField)를 만들고 편집 할 수있는 인라인 관리 인터페이스와 함께 작동하는 방법입니다.

답변

1

이 작업을 수행하는 한 가지 방법은 특정 BlogPage 모델이 아닌 페이지 모델과 관련된 페이지 이미지 연결에 대한보다 일반적인 관계를 이용하는 것입니다.

이것은 모든 페이지가 갤러리 이미지를 가질 수 있음을 의미하므로 InlinePanel을 통해 필드를 콘텐츠 패널에 표시하면됩니다.

매 시간마다 다시 작성하지 않고 유용한 방법을 사용할 수 있도록 Mixin 클래스를 만들 수도 있습니다.

from django.db import models 

from wagtail.admin.edit_handlers import InlinePanel 
from wagtail.core.models import Orderable, Page 
from wagtail.images.edit_handlers import ImageChooserPanel 

class ImageGalleryRelationship(Orderable, models.Model): 
    """ Relationship between any `Page` and `Image` for an image gallery.""" 
    page = ParentalKey(Page, related_name='gallery_page') 
    image = models.ForeignKey('wagtailimages.Image', related_name='gallery_image') 
    panels = [ImageChooserPanel('image')] 


class PageGalleryMixin(): 
    def gallery_images(self): 
     images = [g.image for g in self.gallery_page.all()] 
     return images 

class BlogPage(Page, PageGalleryMixin): 
    # all page fields, gallery does not need to be defined here 
    content_panels = Page.content_panels + [ 
     InlinePanel('gallery_page', label='Image Gallery'), 
     #... 
    ] 

주 :이 InlinePanel는 ParentalKey 관계를 요구하는 OneToOne 연결 아니다 여기

는 일례이다. 이 솔루션에는 실제 '갤러리'모델이 없으며 단지 주문 가능한 관계 집합입니다.

+0

OO 접근법은 한 페이지만으로 제한되는 한 페이지를 통해 작동합니다. –

+0

굉장합니다. 그것을 듣고 기쁘다 일했다. –