Django 如何解决';型号';对象没有属性';对象';用于表单集处理的UpdateView?
我目前正试图克服在处理表单集时遇到的许多问题。这是我的最新代码…在其他问题中,似乎formset和form_invalid()可能存在问题。我试图简单地编辑从CreateView保存的表单集数据。在我从CreateView保存数据后,似乎数据在视图中显示得很好,但是我无法使用此数据或在不更改任何内容的情况下保存它。这个问题看起来非常相似,我试图在一定程度上使用它,但我也无法让它发挥作用 我的看法Django 如何解决';型号';对象没有属性';对象';用于表单集处理的UpdateView?,django,django-models,django-views,django-forms,django-templates,Django,Django Models,Django Views,Django Forms,Django Templates,我目前正试图克服在处理表单集时遇到的许多问题。这是我的最新代码…在其他问题中,似乎formset和form_invalid()可能存在问题。我试图简单地编辑从CreateView保存的表单集数据。在我从CreateView保存数据后,似乎数据在视图中显示得很好,但是我无法使用此数据或在不更改任何内容的情况下保存它。这个问题看起来非常相似,我试图在一定程度上使用它,但我也无法让它发挥作用 我的看法 class UpdateTeamView(LoginRequiredMixin,UpdateView
class UpdateTeamView(LoginRequiredMixin,UpdateView):
model = Team
form_class = UpdateTeamForm
template_name = 'update_team.html'
def get_context_data(self, **kwargs):
context = super(UpdateTeamView, self).get_context_data(**kwargs)
if self.request.POST:
context['player_form'] = PlayerFormSet(self.request.POST)
else:
context['player_form'] = PlayerFormSet(instance=self.object)
return context
def get_form_kwargs(self):
kwargs = super(UpdateTeamView, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
def get_object(self, queryset=None):
return get_object_or_404(Team, id=self.request.GET.get("dropdown"))
def get(self, request, *args, **kwargs):
dropdown=self.request.GET.get("dropdown")
if dropdown is not None:
if Team.objects.all().distinct():
self.object = self.get_object()
context = self.get_context_data(object=self.object)
return self.render_to_response(context)
else:
raise Http404
else:
messages.add_message(self.request, messages.INFO, 'Team is required.')
return HttpResponseRedirect(reverse('Company:update_team_by_name'))
def form_valid(self, form):
instance = form.save()
return super(UpdateTeamView, self).form_valid(form)
def form_invalid(self, form):
return self.render_to_response(
self.get_context_data(form=form,
))
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
if "cancel" in request.POST:
return HttpResponseRedirect(reverse('Company:company_main_menu'))
else:
team_form = TeamForm(self.request.POST)
player_form = UpdateSavedNewCompanyContactFormSet(self.request.POST)
if player_form.is_valid():
print("works")
return HttpResponseRedirect(reverse('Team:main_menu'))
else:
player_form = UpdateSavedNewCompanyContactFormSet()
print("not working")
print(player_form.errors)
return super(UpdateTeamView, self).form_invalid(player_form)
经过反复试验,我终于找到了解决办法
def get_context_data(self, **kwargs):
context = super(UpdateTeamView, self).get_context_data(**kwargs)
if self.request.POST:
context['player_form'] = PlayerFormSet(self.request.POST, instance=self.object)
else:
context['player_form'] = PlayerFormSet(instance=self.object)
return context
def get_form_kwargs(self):
kwargs = super(UpdateTeamView, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
def get_object(self, queryset=None):
return get_object_or_404(UpdateTeamView, id=self.request.GET.get("dropdown"))
def form_valid(self, form):
data = self.get_context_data()
formset = data['company_contact_form']
if formset.is_valid():
self.object = form.save()
formset.instance = self.object
else:
print('formset invalid:', formset.errors)
instance = form.save()
def form_invalid(self, form, *args, **kwargs):
super().form_invalid()
我知道了。这里不需要邮寄。它造成的问题多于好处。我仍然无法让我的数据进行验证,但我现在希望以形式_valid()更新逻辑。