0

First of all, excuse for my english ^^

I don't understand how i can use the select multiple widget in django. I mean, i don't understang which files and functions are necessary.

Example, I have two classes :

class Student(models.Model):
    name=models.CharField(max_length=100)
    subject=models.ManyToManyField(Subjects)
class Subjects(models.Model):
    sub_name=models.CharField(max_length=100)
    desc=models.CharField(max_length=100)

And now, i want to use the select multiple widget, so which files and functions are necessary ?

I hope you understand what I'm asking ^^

Tks :)

Raphael
  • 546
  • 2
  • 6
  • 25

1 Answers1

0

first you need to have a StudentForm in models.py

class StudentForm(ModelForm):
    subject = forms.ModelMultipleChoiceField(queryset=Subjects.objects.all())
    #this would use widget 'SelectMultiple' by default

    class Meta:
        model = Plan
        fields = ['name','subject']

if you want to use checkbox widget:

subject = forms.ModelMultipleChoiceField(queryset=Subjects.objects.all(),widget=CheckboxSelectMultiple())

then in views.py:

class StudentFormView(View):

    form_class = StudentForm
    template_name = 'your_template.html'

    def get(self, request):
        form = self.form_class()
        return render(request, self.template_name, {'form': form})

    def post(self, request):
        form = self.form_class(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('whatever_url_you_like/')
        return render(request, self.template_name, {'form': form})

in your urls.py add this:

url(r'url_to_your_form^$',StudentFormView.as_view())

in your_template.html add this in the body:

<form action="." method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Submit" />
Daniel Qiu
  • 617
  • 5
  • 14
  • what do you have now? Did you put your app in the settings.py? Did you syncdb? what error message do you have? – Daniel Qiu Feb 05 '14 at 03:38