You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中拆分下拉框选项字符串及解决相关报错问题

修复方案

核心问题是你错误地在生成下拉选项的trips函数里执行了split操作,这会破坏从数据库拉取数据的逻辑,导致Full_Record查询失败。正确的做法是:在用户选择下拉选项并触发test1函数时,再对选中的字符串进行拆分,而非在生成下拉列表的阶段。

以下是完整的修复代码:

models.py

from django.db import models

class Full_Record(models.Model):
    team_home = models.CharField(max_length=50)
    team_away = models.CharField(max_length=50)
    # 按需添加其他字段

    def __str__(self):
        return f"{self.team_home}-{self.team_away}"

forms.py

from django import forms
from .models import Full_Record

class TripForm(forms.Form):
    trip_choice = forms.ModelChoiceField(
        queryset=Full_Record.objects.all(),
        empty_label="选择对阵",
        label="赛事对阵"
    )

views.py

from django.shortcuts import render
from django.http import JsonResponse
from .forms import TripForm

def trips(request):
    # 仅负责渲染页面和传递表单,不做拆分操作
    form = TripForm()
    return render(request, 'trips.html', {'form': form})

def test1(request):
    if request.method == 'POST':
        selected_trip = request.POST.get('trip_choice')
        if selected_trip:
            try:
                # 在这里拆分主客场球队
                a, b = selected_trip.split('-')
                # 替换为你的业务逻辑,比如查询数据、生成结果
                result = f"主队: {a}, 客队: {b}"
                return JsonResponse({'result': result})
            except ValueError:
                return JsonResponse({'result': '格式错误,请重新选择'}, status=400)
        return JsonResponse({'result': '请选择对阵'}, status=400)
    return JsonResponse({'result': '无效请求'}, status=405)

trips.html

<!DOCTYPE html>
<html>
<head>
    <title>赛事查询</title>
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
</head>
<body>
    <h3>选择赛事对阵</h3>
    <form id="tripForm">
        {{ form.as_p }}
        <button type="button" id="submitBtn">查询结果</button>
    </form>
    <br>
    <textarea id="resultArea" rows="5" cols="50" readonly></textarea>

    <script>
        $(document).ready(function() {
            $('#submitBtn').click(function() {
                var selectedTrip = $('#id_trip_choice').val();
                $.ajax({
                    url: '/test1/',  // 对应你的URL配置
                    type: 'POST',
                    data: {
                        'trip_choice': selectedTrip,
                        'csrfmiddlewaretoken': '{{ csrf_token }}'
                    },
                    success: function(response) {
                        $('#resultArea').val(response.result);
                    },
                    error: function(xhr) {
                        $('#resultArea').val(xhr.responseJSON.result);
                    }
                });
            });
        });
    </script>
</body>
</html>

关键修复点

  1. 拆分时机调整:把split('-')从生成下拉选项的trips函数移到处理用户请求的test1函数中,避免干扰数据库查询逻辑。
  2. 表单优化:用ModelChoiceField直接绑定Full_Record模型,自动生成x-y格式的下拉选项,无需手动拼接。
  3. 错误处理:在test1中添加try-except捕获拆分失败的情况,避免程序崩溃。
  4. AJAX交互:通过异步请求调用test1,实时在textarea显示结果,无需刷新页面。

内容的提问来源于stack exchange,提问作者Zollikofen4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:55:13