我在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
任何人都可以帮我解释发生了什么事吗?
答案 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()