title: Django ModelForm widgets and labels
body: <p>When I have a regular ModelForm field, setting up its widgets and/or labels will look like this:</p>
  
  <pre><code>class MyModelForm(models.ModelForm):
      class Meta:
          model = MyModel
          fields = ['field_x', 'field_y']
          widgets = {
              'field_x': Forms.TextInput(attrs={'class': 'myclass', 'readonly': 'readonly'}),
              'field_y': Forms.Select(attrs{'class': 'myclass'}),
          }
          labels = {
              'field_x': 'Input your X value here',
              'field_y': 'Select your Y value here',
          }
  </code></pre>
  
  <p>And it's all ok so far. But when it comes about more "complicated" fields, widgets will ignore its attrs... and it's getting me sick.</p>
  
  <p>Example:</p>
  
  <pre><code>class MyComplicatedModelForm(forms.ModelForm):
      field_z = forms.ModelChoiceField(queryset=AnyClass.objects.all(), empty_label=None, required=True, to_field_name='id')
  
      class Meta:
          model = MyComplicatedModel
          fields = ['field_z']
          widgets = {
                  'field_z': Forms.ModelChoiceField(attrs={'class': 'myclass'}),
          }
          labels = {
                  'field_z': 'Select your Z value here',
          }
  </code></pre>
  
  <p>And it will work ok but it will ignore its <code>widgets = {}</code> and <code>labels = {}</code>, it will have a default class and the label will be the name of the field ("field_z").
  How can I manage widgets and labels when it is not a "regular" field like this last one?</p>