代码之家  ›  专栏  ›  技术社区  ›  user7795844

Django ModelForm即使在窗体中也不保存数据。已执行保存

  •  0
  • user7795844  · 技术社区  · 7 年前

    我有一个网站,其中用户有2个模型,他们的个人资料,用户详细信息和用户位置。我试着在一页上提交两个模板表单,一次提交。问题是这些模型表单中的数据没有保存到数据库中。

    我证实了自己。要求POST方法中的POST返回正确的数据。

    我试过:

    Django ModelForm not saving data to database -不起作用

    Django ModelForm not saving data -不起作用

    以下代码适用于管理员。

    以下是我的观点:

    class UpdateProfile(LoginRequiredMixin, UpdateView):
        template_name = 'account/user_profile.html'
        fields = '__all__'
        model = models.UserProfile
        user_detail_form_class = forms.UserDetailForm
        user_location_form_class = forms.UserLocationForm
    
        def get_context_data(self, **kwargs):
            user_profile = get_object_or_404(models.UserProfile, pk=self.kwargs.get(self.pk_url_kwarg))
    
            context = super(UpdateProfile, self).get_context_data(**kwargs)
            if 'user_detail_form' not in context:
                context['user_detail_form'] = self.user_detail_form_class(instance=user_profile.user_detail)
            if 'user_location_form' not in context:
                context['user_location_form'] = self.user_location_form_class(instance=user_profile.user_location)
    
            return context
    
        def get(self, request, *args, **kwargs):
            super(UpdateProfile, self).get(request, *args, **kwargs)
            return self.render_to_response(self.get_context_data())
    
        def post(self, request, *args, **kwargs):
            user_detail_form = self.user_detail_form_class(request.POST)
            user_location_form = self.user_location_form_class(request.POST)
    
            if user_detail_form.is_valid() and user_location_form.is_valid():
                user_detail_form.save()
                user_location_form.save()
                return redirect(self.get_success_url())
            else:
                return self.render_to_response(self.get_context_data())
    
            def get_success_url(self):
                return reverse('account:admin_client_list')
    
            def dispatch(self, request, *args, **kwargs):
                if not request.user.groups.filter(name__in=['Admin']).exists():
                     return errors.render_403(request)
    
                return super(UpdateProfile, self).dispatch(request, *args, **kwargs)
    

    这是我的模板:

    {% extends 'base.html' %}
    
    {% block content %}
    <form method='POST' action="">{% csrf_token %}
        {{ user_detail_form }}
        {{ user_location_form }}
    
        <input type="submit" value="Submit">
    </form>
    
    {% endblock %}
    

    以下是表格:

    class UserDetailForm(forms.ModelForm):
        class Meta:
            model = models.UserDetail
            fields = '__all__'
    
    
    class UserLocationForm(forms.ModelForm):
        class Meta:
            model = models.UserLocation
            fields = '__all__'
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Nayan HenBoy331    7 年前

    你需要通过 instance 创建时的参数 ModelForm 在post方法中。示例代码:

    user_profile = get_object_or_404(models.UserProfile, pk=self.kwargs.get(self.pk_url_kwarg))
    user_detail_form = self.user_detail_form_class(request.POST, instance=user_profile.user_detail)
    user_location_form = self.user_location_form_class(request.POST, instance=user_profile.user_location)