0

Je crée un StructBlock pour StreamField. L'objectif est de créer un bloc qui va télécharger une image ainsi que beaucoup de métadonnées. Les métadonnées sont un mélange de CharBlocks, ImageChooserBlocks et RichTextBlocks.Wagtail ;: ValueError: trop de valeurs à décompresser (2 attendues) lors de la création d'un grand StructBlock personnalisé pour StreamField

Quand je veux faire les changements dans la base de données à l'aide makemigrations je reçois l'erreur « ValueError: trop de valeurs à déballer (attendu 2) »

précédente que je reçois:

File "C:...\models.py", line 66, in CatalogueIndexPage 
    'image', TurnerImageBlock(), 
    File "C:...\wagtail\lib\site-packages\wagtail\wagtailcore\fields.py", line 51, in __init__ 
    self.stream_block = StreamBlock(block_types, required=not self.blank) 
    File "C:...\wagtail\lib\site-packages\wagtail\wagtailcore\blocks\stream_block.py", line 47, in __init__ 
    for name, block in local_blocks: 

je pensant que cela peut être dû à trop de domaines. Mais cela ne devrait pas être un problème. J'ai aussi regardé le formatage mais je ne peux pas le voir. J'ai inclus le code models.py ci-dessous.

from datetime import date 

from wagtail.wagtailcore.models import Page 
from wagtail.wagtailcore.fields import StreamField 
from wagtail.wagtailcore import blocks 
from wagtail.wagtailadmin.edit_handlers import StreamFieldPanel 
from wagtail.wagtailimages.blocks import ImageChooserBlock 


class TurnerImageBlock(blocks.StructBlock): 
    image_title = blocks.CharBlock(required=True) 
    thumbnail = ImageChooserBlock() 
    full_image = ImageChooserBlock() 
    copyright_conditions_of_use = blocks.CharBlock() 

    unique_identifying_number = blocks.CharBlock() 
    date_of_submission = blocks.DateTimeBlock(default=date.today) 

    # person submitting 
    person_submitting_images = blocks.CharBlock() 
    current_owning_inst_person = blocks.CharBlock() 
    inst_personal_unique_impression_accession_no = blocks.CharBlock() 
    inst_personal_unique_image_accession_no = blocks.CharBlock() 

    # Dimensions 
    impression_physical_dimensions = blocks.CharBlock() 
    size_of_paper = blocks.CharBlock() 
    size_of_plate_impression = blocks.CharBlock() 
    size_of_picture = blocks.CharBlock() 

    # Physical Attributes 
    paper_type = blocks.CharBlock() 
    comments_on_impression = blocks.RichTextBlock() 
    condition = blocks.CharBlock() 
    physical_history = blocks.CharBlock() 

    # Digital Image 
    digital_image_dimensions = blocks.CharBlock() 
    digital_image_capture_mechanism = blocks.CharBlock() 
    imaging_device = blocks.CharBlock() 
    device_settings = blocks.CharBlock() 
    calibration = blocks.CharBlock() 
    date_of_capture = blocks.CharBlock() 

    # Engraving info 
    rawlinson_finerg_number = blocks.CharBlock() 
    proposed_version_state = blocks.CharBlock() 
    engraver = blocks.CharBlock() 
    original_engraving_date = blocks.CharBlock() 
    original_publication = blocks.CharBlock() 
    actual_publication = blocks.CharBlock() 

    # text and info on impression 
    printed_text_on_impression = blocks.RichTextBlock() 
    written_info_on_impression = blocks.RichTextBlock() 
    turner_touching_comments = blocks.RichTextBlock() 
    previous_collection_owner = blocks.RichTextBlock() 

    links_related_info = blocks.CharBlock() 
    histories_or_original_drawing = blocks.CharBlock() 


class CatalogueIndexPage(Page): 

    body = StreamField([ 
     'image', TurnerImageBlock(), 
    ]) 

    content_panels = Page.content_panels + [ 
     StreamFieldPanel('body'), 
    ] 

J'ai rencontré des problèmes similaires en disant que c'est une erreur de dictionnaire/tuple etc. Mais je n'ai pas assez d'expérience pour voir où se situe le problème dans mon code.

Répondre

0

StreamField prend une liste de tuples, si

body = StreamField([ 
    'image', TurnerImageBlock(), 
]) 

devrait devenir:

body = StreamField([ 
    ('image', TurnerImageBlock()), 
]) 
+0

Merci! Cela l'a résolu. –