django 1.3基于类的视图 - > FormView,最初是在请求之间进行的?

时间:2012-06-10 20:27:11

标签: python django-forms django-views

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

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

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

相同的formview用于呈现用户可以创建对象的空白表单 如果我从现有对象的形式导航到新对象的形式视图或列表视图,然后导航到新对象的窗体视图,则初始化(即CBV的自我初始化)预先填充来自先前现有对象的信息参观。
显然,我希望self.initial在新的get请求开始时是空白的。

我的理解是每个请求都会生成一个基于类的视图的新实例。初始如何跨越请求进行转移? 我基于一些调试得出这个结论。下面的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建议这是相似的,但我不理解upvote的答案。 Django(trunk) and class based generic views: one form's initial data appearing in another one's

任何人都可以帮我解释发生了什么事吗?

1 个答案:

答案 0 :(得分: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()