我已经为此苦苦挣扎了几天。
我正在使用 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
似乎不起作用。在这种方法中,我尝试序列化对象,我成功地使用“pickable”完成了该操作,但Models.py
将之前的形式而不是我更改的形式作为真实的形式。
3)使用pre_save
and post_save
,但我无权访问Models.py
.
你能帮我解决这个问题吗?