仅更新一个字段时出错 Django Update 方法

问题描述 投票:0回答:2

我有一个用例模型,它有两个外键:kpi 和 usecase_type

我创建了一个方法来更新下拉列表中的这两个字段, 该方法仅在我更新所有字段时更新(如果更新一个下拉列表则显示错误),知道可能是什么原因吗?

我的观点.py:

def edit_usecase(request, ucid):
    try:
        usecase_details = Usecase.objects.filter(usecase_id=ucid)
        context = {"usecase_details":usecase_details[0], "usecase_types": UsecaseType.objects.all(), "usecase_kpis": Kpi.objects.all()}        

        if request.method == "POST":
            usecase_type = request.POST['usecase_type']
            kpi = request.POST['kpi']
            usecase_details = Usecase.objects.get(usecase_id=ucid)
            usecase_details.usecase_type_id=usecase_type
            usecase_details.kpi_id=kpi
            usecase_details.save()
            
            if usecase_details:
                messages.success(request, "Usecase Data was updated successfully!")
                return HttpResponseRedirect(reverse('usecase-details', args=[ucid]))
            else:
                messages.error(request, "Some Error was occurred!")
                return HttpResponseRedirect(reverse('update-usecase', args=[ucid]))
        return render(request, 'UpdateUsecase.html', context)
    except:
        messages.error(request, "Some Error was occurred!")
        return HttpResponseRedirect(reverse('update-usecase', args=[ucid]))

我的模板:

<div class="row  d-flex">
    <div class="col-12 mb-4">
        <div class="card border-light shadow-sm components-section  d-flex ">
            <div class="card-body  d-flex ">
                <div class="row mb-4">                 
                    <div class="card-body">
                        <div class="row col-12">
                        <div class="mb-4">
                            <h4 class="h4 uc-header">Edit usecase details:</h4>
                        </div>
                        <!-- <li role="separator" class="dropdown-divider border-black mb-3 ml-3"></li> -->
                        <form action="/update-usecase/{{usecase_details.usecase_id}}" method="POST">
                            {% csrf_token %}
                            <div class="form-row mb-4">
                              <div class="col-lg-8 mr-f">
                                <label class="h6" for="project-name">Usecase Type:</label>
                                <select name="usecase_type" class="custom-select my-1 mr-sm-2" id="usecase_type">
                                    <option value="0" selected>{{usecase_details.usecase_type.usecase_type_name}}</option>
                                    {% for usecase_type in usecase_types %}
                                    <option value="{{ usecase_type.usecase_type_id }}">{{ usecase_type.usecase_type_name }}</option>
                                    {% endfor %}                             
                                  </select>                          
                                </div>
                                <div class="col-lg-8 mr-f">
                                  <label class="h6" for="project-name">Usecase KPI:</label>
                                  <select name="kpi" class="custom-select my-1 mr-sm-2" id="kpi">
                                      <option value="0" selected>{{usecase_details.kpi.kpi_name}}</option>
                                      {% for kpi in usecase_kpis %}
                                      <option value="{{ kpi.kpi_id }}">{{ kpi.kpi_name }}</option>
                                      {% endfor %}                             
                                    </select>                          
                                  </div> 
                            </div>
                            <input type="submit" class="btn btn-primary" value="Submit Changes">
                          </form>
                    </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
django django-models django-rest-framework django-views django-templates
2个回答
0
投票

对我来说,似乎当没有为下拉列表选择任何内容时,您将获得“0”作为值。
可能没有 UseCaseType 和 id 0 的 KPI,这意味着 django 将抛出错误,因为这些是无效值。
但是,您通过将代码封装在

try except
中来消除所有错误,这意味着您没有在控制台中看到此问题。

usecase_details = Usecase.objects.get(usecase_id=ucid)
if usecase_type != "0":
    usecase_details.usecase_type_id=usecase_type
if kpi!= "0":
    usecase_details.kpi_id=kpi
usecase_details.save()

以上应该可以解决问题,但您应该考虑删除您的

try except
并选择与实际值对应的选项而不是“0”


0
投票

您没有提供错误日志。我认为模板选择字段选择值的问题。你可以试试这个代码:

<div class="form-row mb-4">
    <div class="col-lg-8 mr-f">
        <label class="h6" for="project-name">Usecase Type:</label>
        <select name="usecase_type" class="custom-select my-1 mr-sm-2" id="usecase_type">
            {% for usecase_type in usecase_types %}
            <option value="{{ usecase_type.id }}" {% if usecase_details.usecase_type.id == usecase_type.id %}selected{% endif %}>{{ usecase_type.name }}</option>
            {% endfor %}                             
        </select>                          
    </div>
    <div class="col-lg-8 mr-f">
        <label class="h6" for="project-name">Usecase KPI:</label>
        <select name="kpi" class="custom-select my-1 mr-sm-2" id="kpi">
            {% for kpi in usecase_kpis %}
            <option value="{{ kpi.id }}" {% if usecase_details.kpi.id == kpi.id %}selected{% endif %}>{{ kpi.name }}</option>
            {% endfor %}                             
        </select>                          
    </div> 
</div>
© www.soinside.com 2019 - 2024. All rights reserved.