form_valid django-extra-views 中的方法。在现实形式(S)_有效
form_valid method in django-extra-views. In reality form(s)_valid
我正在尝试使用 Django Extra Views 包创建基于模型 + 内联表单集 + 来自 USER 模型的额外信息的新条目。我知道如何通过基于函数的视图来做到这一点,但现在试图减少代码量:
我有2个模型+用户模型:
Model1: # primary model
author = models.ForeignKey("ExtraUser", )
+some fileds
Model2 # secondary model
photo = models.ForeignKey("Model1", )
+ some fields
# user model
Model ExtraUser(AbstractBaseUser)
+ some fileds
我使用以下 VIEW 一起渲染和保存它们:
class ItemInline(InlineFormSetFactory):
model = Model2
fields = ["somefiled"]
class CreateBoatView(SuccessMessageMixin, LoginRequiredMixin, CreateWithInlinesView):
model = Model1
inlines = [ItemInline]
fields = ["list of the fields here"]
template_name = 'create.html'
def get_success_url(self):
return reverse('app:url', args=(self.object.pk, ))
除一件事外一切正常:我无法将当前用户指定为条目作者,即作者 = models.ForeignKey("ExtraUser", ) 始终为 NULL
在基于祖先函数的视图中,我曾经执行以下操作:
if form1.is_valid():
prim = form1.save(commit=False)
prim.author = request.user # that is I connect this entry to the current user.
# + do something + save(commit=True) finally.
如何在 CreateWithInlinesView 中做同样的事情?
尝试关注。努力工作
def dispatch(self, request, *args, **kwargs):
self.user = request.user
return CreateWithInlinesView.dispatch(self, request, *args, **kwargs)
def form_valid(self, form): #(self, form, inlines)??
self.object = form.save(commit=False)
self.object.author = self.request.user
self.object.save()
return HttpResponseRedirect(self.get_success_url())
# super-class form_valid method (for reference)
def forms_valid(self, form, inlines):
"""
If the form and formsets are valid, save the associated models.
"""
self.object = form.save()
for formset in inlines:
formset.save()
return HttpResponseRedirect(self.get_success_url())
好吧,非常感谢 Django Extra Views 的作者,因为他们添加了特殊方法而不是 form_valid...
猜猜它叫什么???
forms_valid。您确实需要几秒钟才能有所不同,对吗?
我花了大约 5 个小时才找到它。
最后:
def forms_valid(self, form, inlines): #yes, f%%ng form(s)_valid, yeh...
"""
If the form and formsets are valid, save the associated models.
"""
self.object = form.save(commit=False)
self.object.author = self.request.user
form.save(commit=True)
for formset in inlines:
formset.save()
return HttpResponseRedirect(self.get_success_url())
我正在尝试使用 Django Extra Views 包创建基于模型 + 内联表单集 + 来自 USER 模型的额外信息的新条目。我知道如何通过基于函数的视图来做到这一点,但现在试图减少代码量:
我有2个模型+用户模型:
Model1: # primary model
author = models.ForeignKey("ExtraUser", )
+some fileds
Model2 # secondary model
photo = models.ForeignKey("Model1", )
+ some fields
# user model
Model ExtraUser(AbstractBaseUser)
+ some fileds
我使用以下 VIEW 一起渲染和保存它们:
class ItemInline(InlineFormSetFactory):
model = Model2
fields = ["somefiled"]
class CreateBoatView(SuccessMessageMixin, LoginRequiredMixin, CreateWithInlinesView):
model = Model1
inlines = [ItemInline]
fields = ["list of the fields here"]
template_name = 'create.html'
def get_success_url(self):
return reverse('app:url', args=(self.object.pk, ))
除一件事外一切正常:我无法将当前用户指定为条目作者,即作者 = models.ForeignKey("ExtraUser", ) 始终为 NULL
在基于祖先函数的视图中,我曾经执行以下操作:
if form1.is_valid():
prim = form1.save(commit=False)
prim.author = request.user # that is I connect this entry to the current user.
# + do something + save(commit=True) finally.
如何在 CreateWithInlinesView 中做同样的事情?
尝试关注。努力工作
def dispatch(self, request, *args, **kwargs):
self.user = request.user
return CreateWithInlinesView.dispatch(self, request, *args, **kwargs)
def form_valid(self, form): #(self, form, inlines)??
self.object = form.save(commit=False)
self.object.author = self.request.user
self.object.save()
return HttpResponseRedirect(self.get_success_url())
# super-class form_valid method (for reference)
def forms_valid(self, form, inlines):
"""
If the form and formsets are valid, save the associated models.
"""
self.object = form.save()
for formset in inlines:
formset.save()
return HttpResponseRedirect(self.get_success_url())
好吧,非常感谢 Django Extra Views 的作者,因为他们添加了特殊方法而不是 form_valid... 猜猜它叫什么??? forms_valid。您确实需要几秒钟才能有所不同,对吗? 我花了大约 5 个小时才找到它。
最后:
def forms_valid(self, form, inlines): #yes, f%%ng form(s)_valid, yeh...
"""
If the form and formsets are valid, save the associated models.
"""
self.object = form.save(commit=False)
self.object.author = self.request.user
form.save(commit=True)
for formset in inlines:
formset.save()
return HttpResponseRedirect(self.get_success_url())