Значение по умолчанию и empty_label=None в ModelChoiceField не работают вместе (Django)

Я уже несколько дней пытаюсь установить значение по умолчанию для поля ModelChoiceField и оно просто не работает (это форма, которую пользователь может редактировать после ее создания). вот мой код:

views.py

@login_required(login_url='/admin/login')
def edit_keydef(request, id):

    data = {'title': 'View or Edit Key Definition'}
    template = 'generate_keys/edit_keydef.html'

    keydef = get_object_or_404(KeyDefinition, pk=id)

    if request.method == "POST":
        keydetails_form_instance = KeyDefDetailsForm(request.POST, instance=keydef)

        if 'Save' in request.POST:
          # stuff that saves the edited form.
      

        if 'Generate' in request.POST:
          # stuff that generates a key for the user  
    else:
        keydetails_form_instance = None
        if not id:
            keydetails_form_instance = KeyDefDetailsForm()
        else:
            # Retrieve a previously saved form.
            try:
                keydetails = KeyDefinition.objects.get(pk=id)
                keydetails_form_instance = KeyDefDetailsForm(keydetails.to_dict(),
                                             instance = keydetails)
            except KeyDefinition.DoesNotExist as e:
                return redirect('/record_does_not_exist')

    # Form instance has been saved at this stage so update the variant list.
    keydetails_form_instance.update_variants(keydef)

    keydetails_form_instance.update_available_hosts(keydef)

    data['form'] = keydetails_form_instance
    data['set_product_options_url'] = reverse_lazy('set_product_options', kwargs={'id':id})

    return render(request, template, data)

forms.py

class KeyDefDetailsForm (ModelForm) :

    def __init__(self, *args, **kwargs) :
        super(ModelForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_method = 'post'
        self.fields['version'].widget.attrs['class'] = "major_minor"
        self.fields['available_hosts'].default = self.fields['host_label']

    def update_variants(self, keydef_obj):
        # some code that updates the feature_variant field
    
    def update_available_hosts(self, keydef_obj):
        print(keydef_obj.host_label)
        # only show hosts that have been created by this user
        self.fields.update({
            'available_hosts': forms.ModelChoiceField(
                empty_label=None,
                widget=Select(),
                queryset = AvailableHosts.objects.filter(host_developer_email=keydef_obj.developer_email),
                required = False,                
                label = "Available Hosts"
            )
        }) 

    class Meta :
        model = KeyDefinition
        fields = '__all__'
        widgets = {
            'customer_name' : TextInput(),
            'host_method' : TextInput(),
            'issue_date' : TextInput(attrs={'type':'date'}),
            'expiry_date': TextInput(attrs={"type":"date"}),
            'available_hosts' : Select(),
            'country' : Select(),
            'feature' : Select(),
            'activation_request' : HiddenInput(),
            'hostid_provision' : HiddenInput(),
        }

Моя проблема в том, что я хочу отобразить значение по умолчанию в Available Hosts, и поэтому у меня есть строка self.fields['available_hosts'].default = self.fields['host_label']. но это не работает, пока я не установлю empty_label="some string"... что не то, что я хочу - я хочу empty_label=None. Однако, при empty_label=None, значение по умолчанию в итоге становится тем, что выше self.fields['host_label'] - я так запутался!!!

initial должно сработать

form = YourForm(initial = {'available_hosts': id_of_default}))

Django, ModelChoiceField() и начальное значение https://docs.djangoproject.com/en/4.1/topics/forms/modelforms/#providing-initial-values

Вернуться на верх