5

पर स्निपेट में स्ट्रीमफ़ील्ड का उपयोग मैं अपनी Wagtail साइट पर कुछ संरचित स्निपेट बनाने की कोशिश कर रहा हूं। मैंने documentation को देखा, लेकिन इस बिंदु पर कुछ भी नहीं देखा (अगर मुझे याद आया तो मुझे क्षमा करें)।Wagtail

क्या स्निपेट के अंदर StreamField का उपयोग करना संभव है? या, केवल पेज

उत्तर

7

हाँ, आप निश्चित रूप से एक स्निपेट में स्ट्रीमफील्ड जोड़ सकते हैं। यह वैसे ही काम करता है जैसे आप इसे वाग्टेल पेज सबक्लास पर उपयोग करते हैं। यहाँ एक उदाहरण है की यह फायदा नहीं है: तो यह किसी भी मॉडल आप उस पर परिभाषित पर एक ही काम करता है, Streamfield एक Django मॉडल क्षेत्र है:

from wagtail.wagtailsnippets.models import register_snippet 
from wagtail.wagtailadmin.edit_handlers import StreamFieldPanel 

@register_snippet 
class Contact(models.Model): 
    contact_info = StreamField([ 
     ('email', MyBlocks.ContactEmail()), 
     ('phone', MyBlocks.ContactPhone()), 
     ('address', MyBlocks.ContactAddress()), 
    ]) 

    panels = [StreamFieldPanel('contact_info')] 

अतिरिक्त सामान आप के लिए नहीं कहा था। असल में, स्ट्रीमफील्ड बस एक JSON स्ट्रिंग के रूप में बचाता है। एकमात्र चीज जो इसे अलग बनाती है वो ब्लॉक हैं। स्ट्रीमफील्ड के पहले पैरामीटर में परिभाषित ब्लॉक वास्तव में उन उपलब्ध विकल्पों को परिभाषित कर रहे हैं जो स्ट्रीमफील्ड सामग्री उत्पन्न करने के लिए उपयोग कर सकते हैं। ब्लॉक को सीआरयूडी संचालन के लिए एसक्यूएल पर कोई असर नहीं पड़ता है, इन्हें केवल स्ट्रीमफील्ड के लिए सहेजे गए डेटा में हेरफेर करने के लिए उपयोग किया जाता है।

उम्मीद है कि मदद करता है।

+0

बहुत बढ़िया, उत्तर के लिए धन्यवाद केएस धन्यवाद। अब जब मुझे पता है कि यह स्वीकार्य है, (जब मैं किसी कंप्यूटर के सामने वापस आ जाता हूं) तो मैं अपना कोड पोस्ट करूंगा जो आपके से बहुत दूर नहीं है। यह ब्लैक बार जुर्माना उत्पन्न करता है, लेकिन जब आप ब्लॉक पर क्लिक करते हैं तो एक JS त्रुटि होती है। शायद कोई मदद कर सकता है। यह एक सुंदर वेनिला स्थापना है, और वे अन्य स्थानों में ठीक काम करते हैं, इसलिए यह थोड़ा परेशान है। –