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

如何实现Django CRM中Lead字段选项的数据库更新?

Django CRM Lead详情页实现字段修改并更新数据库

1. 定义模型表单

创建forms.py文件,用ModelForm关联Lead模型,自动生成带选项的表单控件并处理验证逻辑:

# forms.py
from django import forms
from .models import Lead

class LeadUpdateForm(forms.ModelForm):
    class Meta:
        model = Lead
        fields = ['lead_owner', 'lead_status']  # 指定需要修改的字段

2. 更新视图支持修改操作

推荐使用Django自带的UpdateView,它集成了详情展示和数据更新逻辑,比手动处理POST更简洁:

# views.py
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.edit import UpdateView
from django.urls import reverse_lazy
from .models import Lead
from .forms import LeadUpdateForm

class LeadUpdateView(LoginRequiredMixin, UpdateView):
    template_name = "lead-details.html"
    model = Lead
    form_class = LeadUpdateForm
    success_url = reverse_lazy('lead-list')  # 替换为你的Lead列表页URL名称

    # 保持上下文变量名为`leads`,与原视图一致
    def get_context_object_name(self, object):
        return "leads"

如果要保留DetailView结构,可扩展它处理POST请求:

# views.py
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import DetailView
from django.shortcuts import redirect
from .models import Lead
from .forms import LeadUpdateForm

class LeadDetailView(LoginRequiredMixin, DetailView):
    template_name = "lead-details.html"
    queryset = Lead.objects.all()
    context_object_name = "leads"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # 将表单传入模板,初始值为当前Lead的字段值
        context['form'] = LeadUpdateForm(instance=self.object)
        return context

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        form = LeadUpdateForm(request.POST, instance=self.object)
        if form.is_valid():
            form.save()
            # 保存后重定向回当前详情页
            return redirect('lead-detail', pk=self.object.pk)
        # 表单验证失败时返回详情页并显示错误
        return self.render_to_response(self.get_context_data(form=form))

3. 修改模板渲染可交互表单

替换原模板中的静态下拉框,用表单组件自动渲染所有选项并标记当前选中值,同时添加提交逻辑:

<!-- lead-details.html -->
<form method="post">
    {% csrf_token %}
    <div id="select">
        <div class="form-group">
            <label for="{{ form.lead_owner.id_for_label }}">Lead Owner</label>
            {{ form.lead_owner }}
        </div>
        <div class="form-group">
            <label for="{{ form.lead_status.id_for_label }}">Lead Status</label>
            {{ form.lead_status }}
        </div>
        <button type="submit" class="btn btn-primary">保存修改</button>
    </div>
</form>

若需手动渲染选项(不推荐,Django表单自动处理更安全):

<div id="select">
    <form method="post">
        {% csrf_token %}
        <div class="form-group">
            <label for="input-select">Lead Owner</label>
            <select class="form-control" id="input-select" name="lead_owner">
                {% for value, label in leads.choices_lead_owner %}
                    <option value="{{ value }}" {% if value == leads.lead_owner %}selected{% endif %}>
                        {{ label }}
                    </option>
                {% endfor %}
            </select>
        </div>
        <div class="form-group">
            <label for="lead-status">Lead Status</label>
            <select class="form-control" id="lead-status" name="lead_status">
                {% for value, label in leads.choices_lead_status %}
                    <option value="{{ value }}" {% if value == leads.lead_status %}selected{% endif %}>
                        {{ label }}
                    </option>
                {% endfor %}
            </select>
        </div>
        <button type="submit" class="btn btn-primary">保存修改</button>
    </form>
</div>

4. 配置URL路由

确保URL指向更新后的视图:

# urls.py
from django.urls import path
from .views import LeadUpdateView  # 或 LeadDetailView

urlpatterns = [
    # ... 其他路由
    path('lead/<int:pk>/', LeadUpdateView.as_view(), name='lead-detail'),
    # ...
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:01:03