Django我正在尝试将最新添加/编辑的元素添加到页面顶部。它可以编辑,但不能添加新元素

我正在获取模型整数字段的最高整数值,然后向其中添加+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})

有人可以向我解释为什么这不适用于第一种表格吗?我真的不知道该功能。

b070206074 回答:Django我正在尝试将最新添加/编辑的元素添加到页面顶部。它可以编辑,但不能添加新元素

我通过将表单保存到新变量而不实际提交来工作,然后添加了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]
            position = max_pos + 1
            xpkej = form.save(commit=False)
            xpkej.ticket_position = position
            xpkej.save()
            form = addTicketForm()
            return HttpResponseRedirect(reverse('titracker:index'))
        else:
            return render(request,self.template_name,{'form':form,'tickets_to_load':Ticket.objects.order_by('-ticket_position')})
本文链接:https://www.f2er.com/3091927.html

大家都在问