2017-10-09 3 views
0

En espérant qu'il existe une solution Django-esque rapide au défi suivant qui n'implique pas JavaScript.Django Formulaire multiple comme cases à cocher dynamiques

Actuellement, j'ai une forme créée qui montre un champ plusieurs à plusieurs comme un simple multiple (intégré dans le comportement de Django) utalising les éléments suivants:

Forms.py:

class ProfileForm(forms.ModelForm): 
    class Meta: 
     model = Profile 
     exclude = ['email_address'] 

Modèle:

<form method="post">{% csrf_token %} 
    {{form}}    
    <button class="btn" type="submit">submit</button> 
</form> 

Modèle:

class Profile(models.Model): 

    email_address = models.CharField(max_length = 100) 

    subscriptions = models.ManyToManyField(Item, blank=True, null=True) 

Cependant, pour soulager l'expérience de l'utilisateur (et améliorer la performance mobile) Je voudrais montrer à la place une liste avec des cases à cocher à côté de chacun.

Existe-t-il un moyen facile d'y parvenir sans JavaScript ou en définissant manuellement chaque option dans le formulaire.

Répondre

1

manière beaucoup plus facile serait de fournir le widget pour abonnements dans Meta classe de ProfileForm

class Meta: 
    model = Profile 
    exclude = ['email_address'] 
    widgets = { 
     'subscriptions': forms.CheckboxSelectMultiple, 
    } 
0

Ajouter ce profil sous forme

subscriptions = forms.ModelMultipleChoiceField(
     widget=forms.CheckboxSelectMultiple 
) 

ou cette

subscriptions = forms.ModelMultipleChoiceField(
    widget=forms.CheckboxSelectMultiple, 
    queryset=Item.objects.all() 
)