2016-05-17 13 views
1
# example objects: 
# free 
# paid 
class ItemType(models.Model): 
    name = models.CharField(...) 


class Item(forms.ModelForm): 
    title = models.CharField(...) 
    item_type = models.ForeignKey(ItemType) 
    destination_free = models.CharField(...) 
    destination_paid = models.CharField(...) 

Wie kann ich destination_free und destination_paid Feld abhängig von item_type Wert angezeigt werden? Also, wenn item_type frei ist, sollte mein Formular destination_free anzeigen, aber wenn item_type bezahlt wird, sollte mein Formular destination_paid Feld anzeigen.Formularfeld in Abhängigkeit von anderem Feldwert

+0

Sie verwenden 'models' Feld in Ihrem Formset? Was genau willst du machen? –

+0

@MHassan Ich möchte in meinem Template 'destination_free' Feld oder' destination_paid' Feld abhängig von ausgewählten 'item_type' Feld anzeigen. – user4812479812

+0

Wenn Sie mit dem Schreiben von 'javascript' einverstanden sind, können Sie beide Formularfelder ausblenden und eine davon anzeigen, nachdem der Benutzer' item_type' mit etwas JavaScript-Code ausgewählt hat. Wenn Sie mit dieser Lösung einverstanden sind und Hilfe benötigen, kann ich Ihnen ein Beispiel zeigen. – alix

Antwort

2

Da ich Ihren vollständigen Code nicht kenne, ist dies nur Basislogik für Client-Seite. Sie können die Werte ändern, wenn Sie benötigen:

class ItemForm(forms.ModelForm): 
    class Meta: 
     model = Item 

    def __init__(self, *args, **kwargs): 
     super(ItemForm, self).__init__(*args, **kwargs) 
     self.fields['item_type'] = forms.ModelChoiceField(queryset=ItemType.objects.all()) 

Und Sie können diese wie in HTML-Datei machen:

$('#id_destination_free').hide(); // destination_free field 
    $('#id_destination_paid').hide(); // destination_paid field 

    $('#id_item_type').on('change', function(){ 
    var optionSelected = $("option:selected", this); 
    var valueSelected = this.value; 
    if (valueSelected == 'something') { 
     $('#id_destination_paid').hide(); 
     $('#id_destination_free').show(); 
    } else if (valueSelected == 'anotherthing') { 
     $('#id_destination_free').hide(); 
     $('#id_destination_paid').show(); 
    } 
    return false; 
    }); 

Da Sie item_type Objekte als Auswahlfeld in dem Formular möchten, das Ihr ModelForm sein kann:

{{ form.as_p }}