Почему поле выбора формы Django не показывает начальное значение из выбранной модели

#python #django

#python #django

Вопрос:

Не удается получить значение модели, которое будет представлено как выбранное в поле выбора формы. В шаблоне у меня есть опция редактирования для моего объекта, и я хочу заполнить все текущие значения объекта в полях формы, но выбранные поля всегда будут показывать значения модели по умолчанию. Есть какие-либо знания, как исправить эту функциональность django?

Итак, что у меня есть сейчас: сначала моя модель:

 class ClientPriceSelection(models.Model):
    A_B_choice = (
        (50.00, 50.00),
        (25.00, 25.00)
    )
    ...
    p_four = models.DecimalField(
        choices=A_B_choice, max_digits=6, decimal_places=2,
        default=50.00, verbose_name="...", help_text="(---)")
  

мое мнение:

     addon = get_object_or_404(ClientPriceSelection, id=addon_id)
    # print(addon.p_four)
    form = ClientPriceListSelectionForm(
        request.POST or None,
        initial={
            'p_one': addon.p_one, 'p_two': addon.p_two,
            'p_three': addon.p_three, 'p_four': addon.p_four,
            'p_five': addon.p_five, 'p_seven': addon.p_seven,
            'p_eight': addon.p_eight, 'p_nine': addon.p_nine,
            'p_ten': addon.p_ten, 'p_eleven': addon.p_eleven,
            'internal_notes': addon.internal_notes,
        })
    context = {
        "form": form,
        'client': get_object_or_404(Client, id=addon.agreement.client.id),
    }
  

моя форма:

 class ClientPriceListSelectionForm(forms.ModelForm):
    class Meta:
        model = ClientPriceSelection
        fields = [
            'p_one', 'p_two', 'p_three', 'p_four', 'p_five',
            'p_seven', 'p_eight', 'p_nine', 'p_ten', 'p_eleven',
            'internal_notes',
        ]
        widgets = {
            'internal_notes': forms.Textarea(
                attrs={'class': 'vLargeTextField', 'cols': '40', 'rows': '10', 'maxlength': '500'}),
        }
  

Комментарии:

1. Вы уверены, что addon.p_four в представлении отличается от значения по умолчанию?

2. Кроме того, вы уверены, что addon.p_four оно содержит правильный выбор? Если оно недопустимо, то форма возвращается к значению модели по умолчанию.

3. Кроме того, если request.POST содержит значение для поля, то это значение используется вместо initial

4. @Ralf — В этом примере у меня есть два варианта 25,00 и 50,00, если я изменю его, например, с 50 на 25, в представлении объекта я увижу правильное значение, и вычисления будут в порядке, но если я захочу отредактировать этот объект, значения для choose будут установлены по умолчанию, все остальные будутпоказано как в db, дополнительно, если я напечатаю значение этого поля, я получу правильное значение.

5. @Ralf — P.S. Проблема здесь в том, что начальное значение, переданное форме, не устанавливает параметр как выбранный <select name="p_four" id="id_p_four"> <option value="50.0">50,0</option> <option value="25.0">25,0</option> </select>

Ответ №1:

Хорошо, я понимаю это, для тех, кто пытается получить опцию, помеченную как select, установив начальные значения в form, используйте параметр отображения поля выбора

 initial={'your_field': object.get_yourField_display}
  

в моем случае его:

 'p_four': addon.get_p_four_display,