【问题标题】:Django - Cannot update the formDjango - 无法更新表单
【发布时间】:2020-07-21 09:15:16
【问题描述】:

我的模板在一种形式中包含三列,它们分别工作。如果我为联系人列和男性列提供输入,它将保存在我的数据库中。 所以基本上我只想更新男性作为联系人,男性和女性输入以相同的 html 形式存在。 我可以更新联系人,但男性或女性输入。 它们都在同一个页面中。我想让它们分开工作,以便我可以更新它们。

问题是,当我为它提供输入时,它会被发布,而不是男性和女性的输入。 即使我在forms.py中包含了男性类的contact1,表单也没有被提交。


from django.urls import path , include
from  . import views



urlpatterns = [
    path('', views.index, name='index'),
    path('info/', views.info, name='info'),
    path('features/', views.features, name='features'),
    path('add/', views.add, name='add'),
    path('add/' ,views.success, name='success'),
    path('update/<str:pk_test>/' ,views.update, name='update')
   

]

views.py

def update(request,pk_test):
    template_name = 'update.html' 
  
 
    # if request.method =='POST':
    #     c_form = commentForm(request.POST,instance=contacts)
    #     if c_form.is_valid() :
             
    #         contact = c_form.save()     
    #         messages.success(request, "Contact Updated")
    #         return redirect("success")     
    #     else:     
    #         c_form = commentForm()            
    # context = {
      
    #     'c_form' : c_form,
       

    # }

    contact = Contact.objects.get(id=pk_test) 
     
    c_form = commentForm(instance=contact)
    m_form = maleForm(instance=contact)  
    f_form = femaleForm(instance=contact)
    if request.method =='POST':
        c_form = commentForm(request.POST,instance=contact)
        m_form = maleForm(request.POST,instance=contact)
        f_form = femaleForm(request.POST,instance=contact)
        if c_form.is_valid() and m_form.is_valid():
                gender = c_form.cleaned_data.get('gender')
                username= c_form.cleaned_data.get('name')
                c_form.save()  
               
                m_form.save()                 
                
             
                       
                messages.success(request, f"Form Submitted: {username}")
                return redirect("success")     
        else:     
                    c_form = commentForm()
                    m_form = okForm()   
                    f_form = femaleForm()
                    
       
              
    context = {
      
        'c_form' : c_form,
        'm_form' : m_form,
        'f_form' : f_form,
        'contact' : contact,

    }

    return render(request , template_name , context)
    ```

models.py




class Male(models.Model):
    contact1 = models.ForeignKey(Contact,  on_delete=models.CASCADE,null=True)
    chest = models.CharField(max_length=30 , blank=True)
    neck = models.CharField(max_length=30 , blank=True)
    full_shoulder_width = models.CharField(max_length=30 , blank=True)
    right_sleeve = models.CharField(max_length=30 , blank=True)
    left_sleeve = models.CharField(max_length=30 , blank=True)
    bicep = models.CharField(max_length=30 , blank=True)
    def __str__(self):
        return chest

 


添加.py

def add(request):
    template_name = 'add.html'
    c_form = commentForm()
    m_form = maleForm()   
    f_form = femaleForm()
                    

   
    contact = Contact.objects.all()  
    if request.method =='POST':
        c_form = commentForm(request.POST)
        m_form = maleForm(request.POST)
        f_form = femaleForm(request.POST)
        if c_form.is_valid() and (m_form.is_valid() or f_form.is_valid()):
                gender = c_form.cleaned_data.get('gender')
                username= c_form.cleaned_data.get('name')
                contact = c_form.save()     
                
                if gender == 'female':
                       
                        female = f_form.save(commit=False)
                        female.contact2 = contact
                        female.save()
                        messages.success(request, f"Form Submitted: {username}")
                        return redirect("success")
                else:
                        male = m_form.save(commit=False)
                        male.contact1 = contact
                        male.save()
                       
                        messages.success(request, f"Form Submitted: {username}")
                        return redirect("success")     
        else:     
                    c_form = commentForm()
                    m_form = maleForm()   

【问题讨论】:

    标签: python django forms


    【解决方案1】:
    Hay there k, 
    Since You are working with Django , there is a built in Function called (UpdateView), 
    

    之前请检查一下我之前做过的这个项目,它可以帮助你很多: The Project -- 转到项目树内的 Posts

    在这里,我将举一个简单的例子来说明它是如何工作的:

    class Update_Posts(UpdateView):
        form_class = Form_Change
        model = MyPosts
        template_name = 'form_page.html'
    
        # Define a post method
        def post(self, request, pk):
            if self.request.user.admin_user or self.request.user.staff_user or self.request.user.active_user:
                instance = get_object_or_404(MyPosts, pk=pk)
                form = self.form_class(
                    self.request.POST, self.request.FILES or None, instance=instance)
                if form.is_valid():
                    return self.form_valid(form)
                else:
                    print('this data isn\'t Valid')
    

    【讨论】:

    • Im practicing in function based view.So I want to do in that not in class based view of now
    • 很公平。最好先练基础,祝你好运
    猜你喜欢
    • 1970-01-01
    • 2013-08-06
    • 2012-03-06
    • 2016-12-30
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 2021-12-01
    相关资源
    最近更新 更多