我正在获取模型整数字段的最高整数值,然后向其中添加+1并将其保存为表单。当我添加新元素时,我会使用像这样的ModelForms:
view.py
class IndexView(TemplateView):
template_name = 'titracker/index.html'
def get(self,request):
form = addTicketForm()
return render(request,self.template_name,{'form':form,'tickets_to_load':Ticket.objects.all().order_by('-ticket_position')})
def post(self,request):
form = addTicketForm(request.POST)
if form.is_valid():
from django.db.models import Max
result = Ticket.objects.all().aggregate(Max('ticket_position'))
my_list = []
for key,value in result.items():
my_list.append(value)
max_pos = my_list[0]
form.ticket_position = max_pos + 1
form.save()
form = addTicketForm()
return HttpResponseRedirect(reverse('titracker:index'))
else:
return render(request,'tickets_to_load':Ticket.objects.order_by('-ticket_position')})
它不起作用,但是当我不使用ModelForms时它起作用
html模板
<div class='container'>
<form class="form-horizontal" role="form" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input class="u-full-width" type="text" name="t_title" value="{{ticket.ticket_title}}"/>
<textarea class="form-control" rows="3" name='t_body'> {{ticket.ticket_body}}</textarea>
<button type="submit" value='post' class="btn btn-info">Submit</button>
<button type="submit" value='post' name='delete' class="btn btn-info">Delete</button>
<select id='status' value='post' name='status'>
{% if ticket.ticket_status == 0 %}
<option>Open</option>
<option value='1'>In progress</option>
<option value='2'>Closed</option>
</select>
{% elif ticket.ticket_status == 1 %}
<option>In progress</option>
<option value='0'>Open</option>
<option value='2'>Closed</option>
</select>
{% elif ticket.ticket_status == 2 %}
<option>Closed</option>
<option value='0'>Open</option>
<option value='1'>In progress</option>
</select>
{% endif %}
</form></div>
</div></center>
</body>
</html>
视图
def editer(request,ticket_id):
tick = get_object_or_404(Ticket,pk=ticket_id)
if request.method == "POST":
ticket = Ticket.objects.get(pk=ticket_id)
if request.POST.get('delete'):
ticket.delete()
form = addTicketForm()
return HttpResponseRedirect(reverse('titracker:index'))
else:
ticket.ticket_title = request.POST.get('t_title')
ticket.ticket_body = request.POST.get('t_body')
ticket.ticket_status = request.POST.get('status')
from django.db.models import Max
result = Ticket.objects.all().aggregate(Max('ticket_position'))
my_list = []
for key,value in result.items():
my_list.append(value)
max_pos = my_list[0]
ticket.ticket_position = max_pos + 1
ticket.save()
return HttpResponseRedirect(reverse('titracker:detail',args=[ticket_id]))
else:
return render(request,'titracker/editer.html',{'ticket': tick})
有人可以向我解释为什么这不适用于第一种表格吗?我真的不知道该功能。