'django form changed_data method: why checked radio button always in changed_data even if not changed?

I want to check when field has been changed when submitting of form with Django. There are tow form attributed that can be used: has_changed (return True if at least one field has been changed) and changed_data (that return list of changed field).

But for a reason I can not understand, when a radio button field is checked, has_changed will always return True, even if not changed (and filed is in changed_data list)

In the example belwo, inc_dat field (date field) behavior is correct but not inc_oui_age which is a radio button

models.py

class Inclusion(models.Model):
    """ A class to create a Inclusion instance. """

    _safedelete_policy = SOFT_DELETE_CASCADE
    # insert model fields
    ide = models.AutoField(primary_key=True)
    pat = models.ForeignKey('Patient',on_delete = models.CASCADE, related_name='inclusion_patient', db_column='pat')
    inc_dat = models.DateField('Date de la visite', null=True, blank=True)
    inc_oui_age = models.IntegerField('18 ans ≤ âge ≤ 45 ans  OU  âge ≥ 55 ans', null=True, blank=True)
...

forms.py


class InclusionForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        self.IDE = kwargs.pop("ide", None)
        self.PATIENT = kwargs.pop("patient", None)
        self.USER = kwargs.pop("user", None)

        super(InclusionForm,self).__init__(*args, **kwargs)
        self.fields['inc_dat'] = forms.DateField(label = 'Date de la visite',widget=forms.TextInput(attrs={'autocomplete': 'off'}),required=False, disabled=DISABLED)
        self.fields['inc_oui_age'] = forms.TypedChoiceField(label = '18 ans ≤ âge ≤ 45 ans  OU  âge ≥ 55 ans',widget=forms.RadioSelect(attrs={'disabled': DISABLED}),required=False,choices=[i for i in Thesaurus.options_list(1,'fr') if i != (None,'')], empty_value=None, disabled=DISABLED)


templates

<!--date-->
<div class="row mb-0">
    <div class="input-group input-group-sm col-6">
        <label>{{ form.inc_dat.label }}</label>
    </div>
    <div class="input-group input-group-sm mb-1 col-2">
        {{ form.inc_dat }}
            <div class="input-group-append">
            <span class="input-group-text rounded-right" id="basic-addon2"><span data-feather="calendar"></span></span>
        </div>
        {% for error in form.inc_dat.errors %}
            <div class="invalid-feedback">{{ error }}</div>
        {% endfor %}
    </div>
</div>

<!--Radio buttons-->
<div class="row mb-0">
    <div class="col-6">
        <label>{{ form.inc_oui_age.label }}</label>
    </div>
    <div class="col-2 inline-block">
    {% for radio in form.inc_oui_age %}
        <label for="{{ radio.id_for_label }}">
            <span class="radio">{{ radio.tag }}</span><span class="ml-1 mr-2">{{ radio.choice_label }}</span>                                    
        </label>
    {% endfor %}
    </div>
</div>


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source