Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何解决';型号';对象没有属性';对象';用于表单集处理的UpdateView?_Django_Django Models_Django Views_Django Forms_Django Templates - Fatal编程技术网

Django 如何解决';型号';对象没有属性';对象';用于表单集处理的UpdateView?

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

我目前正试图克服在处理表单集时遇到的许多问题。这是我的最新代码…在其他问题中,似乎formset和form_invalid()可能存在问题。我试图简单地编辑从CreateView保存的表单集数据。在我从CreateView保存数据后,似乎数据在视图中显示得很好,但是我无法使用此数据或在不更改任何内容的情况下保存它。这个问题看起来非常相似,我试图在一定程度上使用它,但我也无法让它发挥作用

我的看法

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()更新逻辑。