0

我在 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) 和基于类的通用视图:一个表单的初始数据出现在另一个表单中

谁能帮我解释一下发生了什么?

4

1 回答 1

1

get_initial将仅根据initial类的属性返回值。只是一个猜测 - 但你initial是这样设置的吗?

IE

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()
于 2012-06-10T20:56:31.907 回答