从form.save访问请求对象

时间:2010-01-08 01:28:56

标签: django django-forms

我正在使用Django的pyfacebook模块为我的一个网站实现Facebook Connect,我没有使用本地User对象,因为我只想使用Facebook登录。

据我所知,我无法从Django表单上的save方法访问请求对象,那么如何访问提供的中间件给你的facebook对象呢?

我想将用户facebook UID附加到从表单创建的对象,我可以将其作为隐藏字段添加到表单中,但是人们可以更改它以使其看起来来自其他人的问题。

将此uid传递给save()方法的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

您可以在创建表单时在表单上设置变量。

views.py

def myview(request):
    form = FacebookConnectForm(request)

forms.py

class FacebookConnectForm(forms.Form):
    def __init__(self, instance):
        self.instance = instance

    def save(self):
        print self.instance
        ...

答案 1 :(得分:2)

执行此操作的正确方法是使用您要保存的对象的实例,如下所示:

question = Question(user=int(request.facebook.uid))
form = QuestionForm(request.POST, instance=question)
question = form.save()
question.put()

在您的视图中执行此操作,而不是在对象的save()方法中执行此操作。

注意是否需要任何字段,你必须在实例对象中指定它们,调用form.save会抛出异常。