2016-05-17 2 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(...) 

Comment puis-je afficher destination_free et destination_paid champ en fonction de la valeur item_type? Donc, si item_type est libre mon formulaire devrait afficher destination_free mais si item_type est payé, mon formulaire devrait afficher destination_paid.champ selon une autre valeur du champ

+0

vous utilisez le champ 'models' dans votre formset? Qu'est-ce que tu veux faire exactement? –

+0

@MHassan Je souhaite afficher dans mon modèle le champ 'destination_free' ou le champ' destination_paid' en fonction du champ 'item_type' sélectionné. – user4812479812

+0

Si vous êtes d'accord avec l'écriture de 'javascript', vous pouvez masquer les deux champs de formulaire et en afficher un après avoir sélectionné' item_type' avec un code javascript. Si vous êtes d'accord avec cette solution et que vous avez besoin d'aide, je peux vous montrer un exemple. – alix

Répondre

2

Puisque je ne connais pas votre code entier, il s'agit uniquement de la logique de base pour le client. Vous pouvez modifier les valeurs si vous avez besoin:

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

Puisque vous voulez item_type objets comme zone de sélection dans votre formulaire, cela peut être votre ModelForm:

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()) 

Et vous pouvez rendre ce dans le fichier html comme:

{{ form.as_p }}