更改中的数据表格.clean\u d

2024-10-01 19:21:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经为此挣扎了几天了。你知道吗

我使用的是django-Python,我的所有对象都有一个抽象对象,用户不能更改,也不能在页面中看到,但他在登录时会选择。 因此,当他登录时,他输入user,password并选择这个对象,我想确保页面中的所有内容都与该对象相关,因此当他使用另一个实例登录时,不会看到以前的实例。你知道吗

这是我的模型:(正如你所预测的,我所有的对象都有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似乎不起作用。在这种方法中,我尝试序列化对象,我用“pickable”成功地实现了序列化,但是Models.py将前一种形式作为真实形式,而不是我更改的形式。你知道吗

3)使用pre_savepost_save,但我无权访问Models.py中的请求对象。你知道吗

你能帮我做这个吗?你知道吗


Tags: 对象django方法用户selfformdataget
1条回答
网友
1楼 · 发布于 2024-10-01 19:21:02

我认为你不能像你那样直接改变数据的形式。必须保存窗体才能创建数据实例,但尚未提交它,然后更改所需的数据。在你改变了你想要的一切之后,然后保存它(用commit)。你知道吗

例如(非测试)

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)

相关问题 更多 >

    热门问题