سؤال

لدي هذا الرمز في بلدي forms.py:

from django import forms
from formfieldset.forms import FieldsetMixin


class ContactForm(forms.Form, FieldsetMixin):
    full_name = forms.CharField(max_length=120)
    email = forms.EmailField()
    website = forms.URLField()
    message = forms.CharField(max_length=500, widget=forms.Textarea)
    send_notification = forms.BooleanField(required=False)

    fieldsets = ((u'Personal Information',
                {'fields': ('full_name', 'email', 'website'),
                'description': u'Your personal information will not ' \
                                u'be shared with 3rd parties.'}),
                (None,
                {'fields': ('message',),
                'description': u'All HTML will be stripped out.'}),
                (u'Preferences',
                {'fields': ('send_notification',)}))

عندما أحاول استخراج الرمز برمجيا مع inspect إنه يترك fieldsets:

In [1]: import inspect

In [2]: import forms

In [3]: print inspect.getsource(forms)
from django import forms
from formfieldset.forms import FieldsetMixin


class ContactForm(forms.Form, FieldsetMixin):
    full_name = forms.CharField(max_length=120)
    email = forms.EmailField()
    website = forms.URLField()
    message = forms.CharField(max_length=500, widget=forms.Textarea)
    send_notification = forms.BooleanField(required=False)

    fieldsets = ((u'Personal Information',
                {'fields': ('full_name', 'email', 'website'),
                'description': u'Your personal information will not ' \
                                u'be shared with 3rd parties.'}),
                (None,
                {'fields': ('message',),
                'description': u'All HTML will be stripped out.'}),
                (u'Preferences',
                {'fields': ('send_notification',)}))

In [4]: print inspect.getsource(forms.ContactForm)
class ContactForm(forms.Form, FieldsetMixin):
    full_name = forms.CharField(max_length=120)
    email = forms.EmailField()
    website = forms.URLField()
    message = forms.CharField(max_length=500, widget=forms.Textarea)
    send_notification = forms.BooleanField(required=False)


In [5]:      

هذا لا يبدو أن هذا هو مشكلة مع خطوط فارغة. لقد اختبرت دون خط فارغ بينهما ووضع أسطر فارغة إضافية بين السمات الأخرى. النتائج لا تتغير.

أي أفكار لماذا التفتيش هو العودة فقط الجزء من قبل fieldsets وليس المصدر كله للفئة؟

هل كانت مفيدة؟

المحلول

تحرير: مراجعة بناء على التعليقات:

في داخل inspect.getsource(forms.ContactForm) طريقة BlockFinder.tokeneater() يستخدم لتحديد مكان ContactForm توقف كتلة. إلى جانب الآخرين، فحدث tokenize.DEDENT, ، والتي يجدها مباشرة قبل الأذواق في الإصدار المخزنة في Github. يحتوي الخط فقط على استراحة خط، لذلك inspect يعتقد أن الكتلة الحالية قد انتهت.

إذا قمت بإدراج 4 مسافات، فإنها تعمل من أجلي مرة أخرى. لا أستطيع أن أجادل على الأساس المنطقي وراء هذا، ربما الأداء.

class ContactForm(forms.Form):
    full_name = forms.CharField(max_length=120)
    email = forms.EmailField()
    website = forms.URLField()
    message = forms.CharField(max_length=500, widget=forms.Textarea)
    send_notification = forms.BooleanField(required=False)
    # <-- insert 4 spaces here
    fieldsets = ((u'Personal Information',
                {'fields': ('full_name', 'email', 'website'),
                'description': u'Your personal information will not ' \
                                u'be shared with 3rd parties.'}),
                (None,
                {'fields': ('message',),
                'description': u'All HTML will be stripped out.'}),
                (u'Preferences',
                {'fields': ('send_notification',)}))

السبب في أن inspect.getsource(forms) يعمل بشكل مختلف هو ل inspect في هذه الحالة ليس من الضروري تحديد بداية ونهاية تعريف الفصل الدراسي. ببساطة يخرج الملف بأكمله.

نصائح أخرى

تناسبني. ليس لدي "من formfieldset.forms استيراد الققلية Mixin" في التعليمات البرمجية الخاصة بي. ربما هذا يسبب مشكلة ..

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top