我该如何解决'Model'对象没有UpdateView用于表单集处理的属性'object'? [英] How do I solve 'Model' object has no attribute 'object' for UpdateView for formset handling?

查看:36
本文介绍了我该如何解决'Model'对象没有UpdateView用于表单集处理的属性'object'?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正试图解决我在处理表单集时遇到的许多问题.这是我最新的代码...在其他问题中,似乎formset和form_invalid()可能存在问题.我试图简单地编辑从CreateView中保存的表单集数据.从CreateView中保存数据后,数据似乎在视图中显示良好,但是随后我将无法使用此数据或在不进行任何更改的情况下保存它.这个问题似乎非常相似,我试图在一定程度上使用它,但是我也无法使它正常工作...

I am currently trying to get past numerous problems I've encountered with formset handling. Here is my latest code...In other issues it would seem that there might be an issue with formset and form_invalid(). I am trying to simply edit formset data that I have saved from a CreateView. It seems as if the data is presenting fine in the view after I save it from CreateView, but then I am not able to use this data or save it without changing anything. This issue seems eerily similar and I tried to use it to a degree but I couldn't get it to work either...Django passing form_valid inline formset context to get_context_data()

我的看法....

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)
            

推荐答案

经过反复试验,这是我的解决方法....

After a lot of trial and error here was my solution....

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()

这篇关于我该如何解决'Model'对象没有UpdateView用于表单集处理的属性'object'?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆