猿问

表单从模型接收旧数据

我的表单应该从模型中存储的最新条目中接收初始值。但是,如果我通过管理面板编辑或删除模型数据,表单中显示的初始数据将保持不变(尽管它在模型中已被删除)。我对自己做错了什么感到困惑。起初我以为是 Chrome 保存旧数据,但用ctr+shift+r.


我的forms.py:


from stv.models import BazineKaina,


class DrgSkaiciuokle(forms.Form):

    bazine_kaina = forms.DecimalField(max_digits=5, decimal_places=2, required=True,

                                      label="Įveskite bazinę kainą:",

                                      initial= BazineKaina.objects.latest('data'),

                                      )



    def clean_bazine_kaina(self):

        bazine_kaina = self.cleaned_data['bazine_kaina']

        return bazine_kaina

我的模型.py:


class BazineKaina(models.Model):


    bazka = models.DecimalField(max_digits=5, decimal_places=2)


    data = models.DateField(auto_now=False, auto_now_add=True)


    def __str__(self):

        return str(self.bazka)


    class Meta:

        verbose_name_plural = "Bazinė kaina"

        get_latest_by = 'data'

请帮我找出为什么仍然通过表单接收旧数据?


编辑:我发现,如果我重新启动服务器数据将被刷新,但这不能成为生产中的解决方案。如何让表单每次调用时都获取新数据?


一只萌萌小番薯
浏览 157回答 2
2回答

慕的地6264312

你DrgSkaiciuokle是在 Django 启动时导入的,然后实例化任何类属性。因此,当您或启动您的 Django 工作人员.latest()时会执行一次查询,并且不会再更改。runserverinitialinitial在表单的方法中设置,__init__以便在每次实例化表单时调用它。

开满天机

根据dirkgroten 的建议和这个来源,我找到了完整的解决方案:表格.py:class DrgSkaiciuokle(forms.Form):    bazine_kaina = forms.DecimalField(max_digits=5, decimal_places=2, required=True,                                      label="Įveskite bazinę kainą:",                                      help_text="Įprastiniams skaičiavimams naudokite einamųjų metų bazinę kainą",                                      error_messages={'max_digits': 'Bazinė kaina neturi viršyti 5 skaitmenų.'},                                      )    def __init__(self, *args, **kwargs):        initial_arguments = kwargs.get('initial', None)        updated_initial = {}        updated_initial['bazine_kaina'] = BazineKaina.objects.latest('data')        kwargs.update(initial=updated_initial)        super(DrgSkaiciuokle, self).__init__(*args, **kwargs)    def clean_bazine_kaina(self):        bazine_kaina = self.cleaned_data['bazine_kaina']        return bazine_kaina
随时随地看视频慕课网APP

相关分类

Python
我要回答