Domanda

Ho una forma che sembra simile al seguente (semplificato per brevità):

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;'})
    )

Inizialmente, al fine di degrado grazioso, solo Prezzi è visibile. Se l'utente ha javascript abilitato, mi nascondo prezzi e make pricing_type visibile. Ora, su un pricing_type selezione radio, faccio pricing_flat_cost o pricing_percent_off visibile. Questo lo rende un più preciso e facile da usare interfaccia utente.

Le mie domande: Come devo fare per la codifica la logica che capisce dove prendere i valori dalla --- la RegexField o pricing_flat_price e pricing_percent_off i campi? Dovrei forse creare una funzione di ItemForm che le figure it out e restituisce il valore corretto?

O forse c'è un approccio più pulito che qualcuno potrebbe suggerire?

È stato utile?

Soluzione

Definire un widget personalizzato per la selezione del tipo e includere il codice JavaScript in un file .js separati .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top