小编Wog*_*gan的帖子

当commit = False时,Django中是否需要save_m2m()表单save()方法?

文档似乎非常坚定,确实如此......

https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method

我特别提到这一节:

当您的模型与另一个模型具有多对多关系时,可以看到使用commit = False的另一个副作用.如果模型具有多对多关系,并且在保存表单时指定commit = False,则Django无法立即保存多对多关系的表单数据.这是因为在实例存在于数据库中之前,无法为实例保存多对多数据.

要解决此问题,每次使用commit = False保存表单时,Django都会向您的ModelForm子类添加save_m2m()方法.手动保存表单生成的实例后,可以调用save_m2m()来保存多对多表单数据.

我对django很新,昨天偶然发现了这些信息.

但是,我有一个视图,我不调用save_m2m()方法,但实际上它保存m2m数据.

这是我的观点:

class SubscriberCreateView(AuthCreateView):
    model = Subscriber
    template_name = "forms/app.html"
    form_class = SubscriberForm
    success_url = "/app/subscribers/"

    def get_form_kwargs(self):
        kwargs = super(SubscriberCreateView, self).get_form_kwargs()
        kwargs.update({'user': self.request.user})
        return kwargs

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.user = self.request.user
        try:
            self.object.full_clean()
        except ValidationError:
            form._errors["email"] = ErrorList([u"This subscriber email is already in your account."])
            return super(SubscriberCreateView, self).form_invalid(form)
        return super(SubscriberCreateView, self).form_valid(form)
Run Code Online (Sandbox Code Playgroud)

我的模特:

class Subscriber(models.Model):

    STATUS_CHOICES = (
        (1, ('Subscribed')),
        (2, ('Unsubscribed')),
        (3, ('Marked as …
Run Code Online (Sandbox Code Playgroud)

django django-models django-forms django-views

10
推荐指数
2
解决办法
1万
查看次数

GoogleUser对象没有grantOfflineAccess方法?

我正在使用Google登录对我网站上的用户进行身份验证,然后作为单独的步骤询问脱机权限.

根据文档,GoogleUser对象应该有一个方法"grantOfflineAccess",该方法提示其他权限,而不会提示用户确认其帐户.然而,在Firebug中检查对象时,我发现所描述的所有其他方法,但不是grantOfflineAccess.

我有一个使用GoogleAuth对象的grantOfflineAccess方法的解决方法但强制用户确认他们的帐户(我想避免,因为他们刚刚在登录时执行了该步骤).我想保持登录并授权离线访问提示单独,以便我可以在它们之间进行一些验证.

文档错误/过时了吗?有没有其他方法可以达到我想要的行为?

javascript google-api google-oauth google-signin

7
推荐指数
1
解决办法
1656
查看次数