Django: Проблема с отображением обновлений для поля MultipleChoiceField, шаблон продолжает отображать начальные значения

Первый пост, заранее прошу прощения за ошибки.

Моя проблема: Я инициализирую поля своей модели из собственной базы данных. Эти поля правильно отображаются в моем шаблоне при первом показе (я вижу, что html отражает значения в моей собственной базе данных). Затем я изменяю начальные параметры выбора (для MultiSelectField) в моем шаблоне и сохраняю эти измененные параметры в Django db (проверено, что они сохраняются через функцию администратора) через перегрузку постов в моих представлениях. Мой success_url настроен в urls.py для повторного отображения того же представления. Я перегрузил get_context_data в представлениях для загрузки данных формы из базы данных Django, и для обновления контекстных данных этими загруженными данными, идея в том, что когда шаблоны повторно отображаются (при выборе кнопки submit_button), моя html форма должна теперь отображать данные, загруженные из базы данных Django (а не начальные значения). Но происходит то, что начальные значения отображаются, в отличие от измененных значений, которые я загрузил из базы данных Django. Я был бы очень признателен за помощь в понимании того, почему шаблон отображает значения, отличные от тех, что я загрузил из базы данных Django. Значение формы, которое я обновляю в своем контексте перед тем, как вернуть его в views.py, не является тем, что отображается в шаблоне.

my models.py:

class LiquidAssetModel(models.Model):
   #Get my initial values from an external db
   unq_assets = Jnance_base_data_main.get_unq_assets()
   init_values = Jnance_base_data_main.get_liq_indexes()
   liq_dates = Jnance_base_data_main.get_dates()

   #initialize my fields
   liquid_choices = MultiSelectField(choices = unq_assets, default = init_values)
   from_date = models.CharField(max_length=200, choices=liq_dates, default=liq_dates[0][0])
   to_date = models.CharField(max_length=200, choices=liq_dates, default=liq_dates[0][0])

   def __str__(self):
      return self.from_date

Мой froms.py:

class LiquidAssetsForm(forms.ModelForm):
   # specify the name of model to use
   class Meta:
      model = LiquidAssetModel
      fields = "__all__"

Моя перегрузка постов из views.py

def post(self, request, *args, **kwargs):
    form_class = self.get_form_class()
    form = self.get_form(form_class)
    #form = forms.LiquidAssetsForm(request.POST)

    #form.is_valid goes to the LiquidAssetsForm class and clean(self) overload to check whether the submitted data is fine
    if form.is_valid():
        liquid_indexes = form.cleaned_data.get('liquid_choices')
        from_index = form.cleaned_data.get('from_date')
        to_index = form.cleaned_data.get('to_date')

        #cleare the database
        all_forms = LiquidAssetModel.objects.all()
        all_forms.delete()

        form.save(commit=False)
        form.save(commit=True)

        #save our liquid asset choices to db
        Jnance_base_data_main.put_liq(liquid_indexes)

        #make sure the db is set up, copy the excel files, and then load them into the db
        Jnance_base_data_main.gen_liq_graph(liquid_indexes, int(from_index), int(to_index))

        return self.form_valid(form, **kwargs)

    else:
        return self.form_invalid(form, **kwargs)

моя перегрузка get_context_data из views.py:

 class LiquidView(FormView):
    template_name = 'liquid_chart.html'
    form_class = forms.LiquidAssetsForm
    success_url ="/thanksLiquid/"
    liq_file_name = ''

    def get_context_data(self, **kwargs):
       context = super(LiquidView, self).get_context_data(**kwargs)

       #build the string to search for a date_NAV file
       search_str = settings.STATIC_ROOT + '/Jnance_Mainapp/images/date_liq*'
       search_str = search_str.replace('\\', '/')

       #search for a file
       the_files = glob.glob(search_str)

       #split the string and only use the part after 'static/', since we will use the static template tag in the html
       if the_files:
          #just use the very first file we found in the list
          self.liq_file_name = the_files[0].split('static/')[1]
          self.liq_file_name = self.liq_file_name.replace('\\', '/')
       else:
          print("Jnance_Mainapp: views LiquidView no liquid chart found to display")

       #update our context with the file name
       context.update({'liquid_file_name': self.liq_file_name})

       form_class = self.get_form_class()
       form = self.get_form(form_class)
       the_obj = LiquidAssetModel.objects.all()

       if len(the_obj) == 0:
          #no forms saved yet
          pass
       else:
          form.liquid_choices = the_obj.values('liquid_choices')[0]
          form.from_date = the_obj.values('from_date')[0]
          form.to_date = the_obj.values('to_date')[0]

       print (form.liquid_choices)

       context.update({'form': form})

       return context

my urls.py:

urlpatterns = [
path('', views.HomeView.as_view(), name='home'),
path('NAV_Charts/', views.NAVView.as_view(), name='NAV_Charts'),
path('Asset_Charts/', views.AssetView.as_view(), name='Asset_Charts'),
path('Liquid_Charts/', views.LiquidView.as_view(), name='Liquid_Charts'),
path('Sum_Charts/', views.SumView.as_view(), name='Sum_Charts'),
path('Base_Load/', views.BaseLoadView.as_view(), name='Base_Load'),
path('admin/', admin.site.urls, name= 'admin'),
path('thanksNAV/', views.NAVView.as_view()),
path('thanksAsset/', views.AssetView.as_view()),
path('thanksLiquid/', views.LiquidView.as_view()),
path('thanksBaseLoadForm/', views.BaseLoadView.as_view()),
path('Jnance_Mainapp/', include('Jnance_Mainapp.urls', namespace='Jnance_Mainapp')),]

мой шаблон:

{% extends "base.html" %}
{% load static %}
{% load crispy_forms_tags %}
  {% block body_block %}
  <h1 class="text-center display-1" Bootstrap heading (2.5rem = 40px)>Jnance Liquid Assets Chart Generation</h1>
  <form method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    <table class="row">
      <div class="row">
        <div class="col-sm-6 text-center align-left">
          <img class="img-fluid mb-1" src="{% static liquid_file_name %}" alt="Unable to load chart!"/>
        </div>
        <br>
        <div class="col-sm-3 text-left align-left">
          {{ form.from_date|as_crispy_field }}
          <br>
          {{ form.to_date|as_crispy_field }}
          <br>
          <br>
          <input name="submit_button" type="submit" value="Generate" id="update_button"  
                  class="btn btn-success" enctype="multipart/form-data">
        </div>
        <div class="col-sm-3 text-left align-left">
            {{ form.liquid_choices|as_crispy_field }}
        </div>
      </div>
    </table>
  </form>
  {% endblock %}

Вы устанавливаете начальные значения на любой первый объект, который возвращается в the_obj = LiquidAssetModel.objects.all(), когда вы устанавливаете их с помощью the_obj.values('liquid_choices')[0]

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