更改form.cleaned_data中的数据

时间:2012-11-26 15:51:18

标签: python django session models

我一直在苦苦挣扎几天。

我正在使用django Python,我的所有对象都有一个抽象对象,用户无法更改,也无法在页面中看到,但他登录时会选择。 因此,当他登录时,他输入用户,密码并选择此对象,我想确保页面内的所有内容都与该对象相关,因此当他使用其他实例登录时,看不到之前的实例。

这是我的模型:(你可以预测,我的所有对象都有commonObject)

class Model(models.Model):
    name = models.CharField(max_length=200)
    thing = models.IntegerField()
    commonObject = models.ForeignKey(commonObject, editable=False)

现在我的问题是我无法保存commonObject。请记住,我正在使用django-smarter,这里是add_view代码

action = self.action
form_kwargs = self.get_form_kwargs(action, request, *args, **kwargs)
if request.method == 'POST':
    form = self.get_form(action=action,
                        data=request.POST,
                        files=request.FILES,
                        **form_kwargs)
    if form.is_valid():
        form.cleaned_data['commonObject'] = pk.loads(request.session.get('commonObject'))
        print form.cleaned_data #Here the commonObject is the one that I want, but save doesn't seem to care
        instance = self.save_form(form)
        return self.add_success(request, instance)
else:
    form = self.get_form(action=action, **form_kwargs)
context = {'form': form}
return self.render_to_response(context)

我的方法是:

1)将commonObject保存在模型的save()方法中重写它。这样做的问题是我无法访问请求对象(既不会将常见对象保存在会话中,也不会保存在用户对象的另一列中)。

2)改变form.clean_data似乎不起作用。在这种方法中,我尝试序列化对象,我成功地使用“可选”,但Models.py正在采用前一种形式而不是我改变的形式。

3)使用pre_savepost_save,但我无法访问Models.py中的请求对象。

你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

我认为你不能像你一样直接改变数据。您必须保存表单以创建数据实例但不提交它然后更改所需的数据。在您更改所需的所有内容后,将其保存(使用提交)。

e.g。 (不测试)

if form.is_valid():
    instance = form.save(commit=False)
    instance.commonObject = pk.loads(request.session.get('commonObject'))
    instance.save()
    return self.add_success(request, instance)