title: Set Default value for a django ModelChoiceField
body: <p>I need to set a default value for <code>ModelChoiceField</code></p>
  
  <p>The value is being sent from my <code>views.py</code>.</p>
  
  <p>I've looked for some other similar questions but it didn't really help as it was all about <code>ChoiceField</code> with <code>choices</code> not a <code>ModelChoiceField</code> with <code>queryset</code> </p>
  
  <p><strong>views.py</strong></p>
  
  <pre class="lang-py prettyprint-override"><code>def edit_package(request, pk):
      current_package = get_object_or_404(models.Package, pk=pk)
      edit_package_form = forms.EditPackageForm(request.POST, name=current_package.package_name,
                                                teacher=current_package.package_teacher_name,
                                                level=current_package.package_level,
                                                subject=current_package.package_subject,
                                                price=current_package.package_price)
      if request.method == 'POST':
          if edit_package_form.is_valid():
              pass
          else:
              edit_package_form = forms.EditPackageForm(request.POST, name=current_package.package_name,
                                                        teacher=current_package.package_teacher_name,
                                                        level=current_package.package_level,
                                                        subject=current_package.package_subject,
                                                        price=current_package.package_price)
      context = {
          'current_package': current_package,
          'edit_package_form': edit_package_form,
      }
      return render(request, 'edit_package.html', context)
  </code></pre>
  
  <p><strong>forms.py</strong></p>
  
  <pre class="lang-py prettyprint-override"><code>class EditPackageForm(forms.Form):
      def __init__(self, *args, **kwargs):
          current_name = kwargs.pop("name")  
          current_teacher = kwargs.pop("teacher")  
          current_level = kwargs.pop("level")  
          current_subject = kwargs.pop("subject")  
          current_price = kwargs.pop("price")  
  
          super(EditPackageForm, self).__init__(*args, **kwargs)
          self.fields['package_name'] = forms.CharField(
              widget=forms.TextInput(attrs={'class': 'form-control', 'value': current_name}))
          self.fields['teacher_name'] = forms.ModelChoiceField(queryset=models.Teacher.objects.all(),
                                                               initial=current_teacher,
                                                               widget=forms.Select(attrs={'class': 'form-control'}),
                                                               required=False)
          self.fields['level_name'] = forms.ModelChoiceField(queryset=models.Level.objects.all(),
                                                             initial=current_level,
                                                             widget=forms.Select(attrs={'class': 'form-control'}),
                                                             required=False)
          self.fields['subject_name'] = forms.ModelChoiceField(queryset=models.Subject.objects.all(),
                                                               initial=current_subject,
                                                               widget=forms.Select(attrs={'class': 'form-control'}),
                                                               required=False)
          self.fields['package_price'] = forms.IntegerField(
              widget=forms.NumberInput(attrs={'class': 'form-control', 'value': current_price}))
  </code></pre>
  
  <p>And that is how it looks, <code>TextInput</code> and <code>NumberInput</code> have the default value, but the <code>initial</code> didn't work with <code>ModelChoiceField</code></p>
  
  <p><img src="https://snag.gy/SO2YIp.jpg" alt="Screen_shot" title="tooltip"></p>