【问题标题】:django 1.3 class based views -> FormView, initial carried over between requests?django 1.3 基于类的视图-> FormView,请求之间的初始结转?
【发布时间】:2012-06-10 20:27:10
【问题描述】:

我在 Django 中遇到了一个奇怪的问题,我认为这可能是因为我没有正确理解基于类的视图是如何工作的。

基本上我有一个 ListView 和一个 FormView。一是列出对象,二是编辑。

在浏览器中,如果我从列表视图导航到现有对象的表单视图,我会得到预期的结果:表单字段填充了预期值。

相同的表单视图用于呈现一个空白表单,用户可以在其中创建对象。
如果我从现有对象的表单导航到新对象的表单视图或列表视图,然后导航到新对象的表单视图,则初始(即 CBV 的 self.initial)会预先填充来自现有对象的信息访问过。
显然,我希望 self.initial 在新的获取请求开始时为空白。

我的理解是每个请求都会生成一个基于类的视图的新实例。初始如何跨请求结转? 我是根据一些调试得出这个结论的。下面的 get_initial() 中的相关行。

def get_initial(self, **kwargs):
    initial = super(M_EditNewsletterView, self).get_initial(**kwargs)       
    fs_logger.debug('initial immediately after super -> %s' % initial)

SO 建议这是相似的,但我不明白赞成票的答案。 Django(trunk) and class based generic views: one form's initial data appearing in another one's

谁能帮我解释一下这是怎么回事?

【问题讨论】:

    标签: python django-forms django-views


    【解决方案1】:

    get_initial 将简单地返回基于类的initial 属性的值。只是一个猜测 - 但你是这样设置 initial 的吗?

    class M_EditNewsletterView(FormView):
        #this value will essentially be constant as it belongs to the 
        #class, not the instance
        initial = get_my_value()
    

    您应该自己覆盖“get_initial”方法。

    def get_initial(self, **kwargs):
        return get_my_value()
    

    【讨论】:

    • 感谢大卫的回复。抱歉不行。我正在覆盖 get_initial.... 目前解决问题的技巧实际上是将 get_initial() 中的第一行设置为 initial = {}
    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2021-05-30
    • 2013-12-03
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多