我正在尝试更新我以前存在的模型**(ShiftChange(**,在基于模型的形式中,我使用了CHOICES,如下所示。
from django.db import models
======
=============
)
class ShiftChange(models.Model):
ldap_id = models.CharField(max_length=64)
Vendor_Company = models.CharField(max_length=64,choices=VENDOR_CHOICES,default='genesys')
EmailID = models.EmailField(max_length=64,unique=True)
Shift_timing = models.CharField(max_length=64,choices=SHIFT_CHOICES,default='General_Shift')
Reason = models.TextField(max_length=256)
# updated_time = models.DateTimeField(auto_now=True)
为了更新,我使用了基于html的表单,因为我想向最终用户显示内容(最终用户会点击更新按钮,如果他愿意,他可以通过选择下拉按钮来更改值(。我已经实现了创建、检索和删除视图,它运行良好,但更新操作不起作用。请找到我正在使用的html代码。update.html
<p>User information Update Form</p>
<!-- <h5><span3>Note:</span3> For timing please use this format e.g 1.Morning Shift = <span2>6.30-3.30</span2> <br>2.Second Shift= <span1>3.30-12.30</span1><br>3.general Shift =<span4>9.00-6.00</span4></h5>-->
<form method="post" class="post-form">
{%csrf_token%}
Ldap ID: <input type="text" name="ldap_id" value="{{oneuser.ldap_id}}"><br><br>
Email ID: <input type="email" name="EmailID" value="{{oneuser.EmailID}}"><br><br>
Company Name:<select name="Vendor_Company"
<option value="{{oneuser.Vendor_Company}}">Genesys</option>
<option value="{{oneuser.Vendor_Company}}">RMSI</option>
<option value="{{oneuser.Vendor_Company}}">TCS</option>
<option value="{{oneuser.Vendor_Company}}">Cognizant</option>
<option value="{{oneuser.Vendor_Company}}">CTS</option></form></select>
<br><br>
Shift Timing:<select name="Shift_timing" choices=VENDOR_CHOICES
<option value="{{oneuser.Shift_timing}}">9.00-6.00</option>
<option value="{{oneuser.Shift_timing}}">6.30-3.30</option>
<option value="{{oneuser.Shift_timing}}">12.30-3.30</option></div></select>
<br><br>
<!-- Shift Timing: <input type="text" name="Shift_timing" value="{{oneuser.Shift_timing}}"><br><br>-->
Reason/justification for Change: <input type="textarea" name="Reason" value="{{oneuser.Reason}}"><br><br>
<input type="submit" name="" value="Update Detail">
</form>
</div>
</div>
当我将光标移动到更新按钮上时,我可以看到它显示了正确的url,但当从下拉选项更改了几个字段后单击提交时,它会重定向到目标页面,但更改不会反映在数据库中。
我认为这个问题的出现是因为在模型中实现了CHOICES选项,因为没有选项(下拉菜单(它可以正常工作。
还想知道是否有任何方法可以通过使用基于模型的表单而不是html来实现这一点(但问题是如果我们使用模型表单,如何显示内容(。
我的视图.py代码
def update_view(request,id):
oneuser=ShiftChange.objects.get(id=id)
if request.method == "POST":
form=ShiftChangeForm(request.POST,instance=oneuser)
if form.is_valid():
form.save(commit=True)
return HttpResponseRedirect('/alldata')
return render(request,'apple/update.html',{'oneuser':oneuser})
urls.py
url(r'^update/(?P<id>d+)/$', views.update_view),
你能通过以下操作为url命名吗:
url(r'^update/(?P<id>d+)/$', views.update_view, name='update_shift'),
然后在你的模板中,你必须在表单标签的动作属性中提供URL名称,以便表单根据需要点击更新URL,如图所示:
<form method="post" class="post-form" action="{% url 'update_shift' oneuser.ldap_id %}">
然后,您可以在视图中打印表单,以查看如下内容:
print(form)
有关在操作中提供表单URL的信息,请参阅此django文档:
从这里开始,您可以执行保存。如果你不使用模型表单,你必须手动从表单中获取数据,然后像这样保存。
并参考这个堆叠流,以在不使用模型的情况下保存到数据库