文档似乎非常坚定,确实如此......
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) 我正在使用Google登录对我网站上的用户进行身份验证,然后作为单独的步骤询问脱机权限.
根据文档,GoogleUser对象应该有一个方法"grantOfflineAccess",该方法提示其他权限,而不会提示用户确认其帐户.然而,在Firebug中检查对象时,我发现所描述的所有其他方法,但不是grantOfflineAccess.
我有一个使用GoogleAuth对象的grantOfflineAccess方法的解决方法但强制用户确认他们的帐户(我想避免,因为他们刚刚在登录时执行了该步骤).我想保持登录并授权离线访问提示单独,以便我可以在它们之间进行一些验证.
文档错误/过时了吗?有没有其他方法可以达到我想要的行为?