2016-07-18 13 views
0

Was ist der Unterschied in diesen beiden Implementierungen der Erstellung eines Karussells? Beide scheinen dasselbe zu tun, allerdings hat man explizit Fremdschlüssel definiert. Die erste Implementierung kann einfach durch Aufruf aufgerufen werden, während die zweite Implementierung über einen ParentalKey mit einem Modell verbunden werden muss. Was ist im Grunde die bessere Option, ein Karussell für die Anzeige auf einer Homepage zu implementieren?Karussellmodell Definition oder Block

class ImageCarouselBlock(blocks.StructBlock): 
    image = ImageChooserBlock() 
    caption = blocks.TextBlock(required=False) 
    page = PageChooserBlock() 

    class Meta: 
     icon = 'image' 

class CarouselItem(LinkFields): 
    image = models.ForeignKey(
     'wagtailimages.Image', 
     null=True, 
     blank=True, 
     on_delete=models.SET_NULL, 
     related_name='+' 
    ) 
    link_url = models.models.ForeignKey(
     'wagtailcore.Page', 
     null=True, 
     blank=True, 
     on_delete=models.SET_NULL, 
     related_name='+' 
    ) 
    caption = models.CharField(max_length=255, blank=True) 

    panels = [ 
     ImageChooserPanel('image'), 
     FieldPanel('link_url'), 
     FieldPanel('caption'), 
     MultiFieldPanel(LinkFields.panels, "Link"), 
    ] 

    class Meta: 
     abstract = True 

Antwort

1

Der Hauptvorteil des StructBlock/StreamField Ansatzes ist die Fähigkeit, verschiedene Blocktypen in der Reihenfolge mischen - so zum Beispiel, könnten Sie ImageCarouselBlock und VideoCarouselBlock definieren ein Karussell zu haben, die Bilder und Videos mischt.

Wenn Sie nur eine Art von Objekt in der Sequenz haben, gibt es nicht viel zu wählen zwischen den beiden Ansätzen. Die Verwendung eines Kindmodells/InlinePanels ist jedoch unter dem Gesichtspunkt der Datenmodellierung wohl angenehmer, da jedes Objekt einen echten Datenbankeintrag erhält (im Gegensatz zu StreamField, wo die Daten in einem einzigen JSON-Feld gespeichert sind), was bedeutet, dass Sie ausgeführt werden können Datenbankabfragen mit diesen Daten. (Es ist ein bisschen schwierig, ein unkonventionelles Beispiel dafür zu finden, warum man das mit einem Karussell machen möchte - aber man könnte Dinge wie "gib mir alle NewsPages, die Bild X in ihrem Karussell enthalten" sagen.)

Verwandte Themen