سؤال

لدي نموذج يشبه ما يلي (مبسط للإيجاز):

PRICING_PATTERN = r'(?:^\$?(?P<flat_price>\d+|\d?\.\d\d)$)|(?:^(?P<percent_off>\d+)\s*\%\s*off$)'
class ItemForm(forms.Form):
    pricing = forms.RegexField(
        label='Pricing',
        regex=PRICING_PATTERN
    )

    pricing_type = forms.CharField(
        label='Deal type',
        widget=forms.RadioSelect(
            choices=(
                ('flat_price','Flat price'),
                ('percent_off','Percentage off'),
            ),
           attrs={'style': 'display: none;'})
        ),
    )

    pricing_flat_price = forms.DecimalField(
        label='Flat price',
        max_digits=5,
        decimal_places=2,
        widget=forms.TextInput(attrs={'style': 'display: none;'})
    )

    pricing_percent_off = forms.IntegerField(
        label='Percent off',
        required=False,
        min_value=0,
        max_value=100,
        widget=forms.TextInput(attrs={'style': 'display: none;'})
    )

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

أسئلتي: كيف يجب أن أتعامل مع ترميز المنطق الذي يكتشف من أين تأخذ القيم من --- regexfield أو التسعير _flat_price و التسعير _percent_off مجالات؟ هل يجب أن أقوم بإنشاء وظيفة في ItemForm هذا يحددها وإرجاع القيمة الصحيحة؟

أو ربما هناك نهج أنظف يمكن أن يقترحه شخص ما؟

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

المحلول

حدد عنصر واجهة مستخدم مخصصة لاختيار النوع وتضمين رمز JavaScript كملف .js منفصل.

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