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

Django CRM项目创建组织时组织名称被团队名称覆盖的问题求助

问题排查与解决:组织名称被团队名称覆盖

问题根源

模板中组织名称和团队名称的输入框均使用了name="name"属性,表单提交时,HTTP POST参数中后出现的name值(团队名称)会覆盖先出现的name值(组织名称)。视图中AddOrganizationForm(request.POST)读取的是被覆盖后的name,最终导致Organization模型的name字段存储了团队名称。

解决方案

1. 给表单添加前缀(避免字段名冲突)

在add_organization视图函数中,为organization_form和team_form添加prefix参数,区分不同表单的字段:

@login_required
@superuser_access
def add_organization(request):
    if request.method == 'GET':
        user_form = AddOrgOwnerForm()
        # 添加prefix区分表单字段
        organization_form = AddOrganizationForm(prefix='org')
        team_form = AddTeamForm(prefix='team')
    else:
        user_form = AddOrgOwnerForm(request.POST)
        organization_form = AddOrganizationForm(request.POST, prefix='org')
        team_form = AddTeamForm(request.POST, prefix='team')

        # 后续逻辑保持不变...

2. 修正模板中的输入渲染

推荐使用Django表单的内置渲染方式(自动处理前缀、错误信息),替换手动编写的input标签:

{% extends "common/base.html" %}
{% load static %}
{% block title %}Add organization{% endblock %}
{% block content %}
    <div class="flex justify-center items-center h-screen w-full bg-blue-100 font-light">
        <div class="w-1/2 bg-white shadow-xl shadow-gray-700 p-8 m-4 rounded-xl">
            <div class="justify-self-end">
                <a href="{% url 'organization_list' %}"
                   class="justify-center bg-gray-500 hover:bg-green-900 text-white px-4 py-2 rounded-lg transition duration-200">
                    Back
                </a>
            </div>
            <h1 class="block w-full text-center text-gray-800 text-2xl mb-6">Create organization</h1>
            <form action="{% url 'add_organization' %}" method="post">
                {% csrf_token %}
                <!-- 组织名称:使用表单字段渲染 -->
                <div class="flex flex-col mb-4">
                    <label class="mb-2 text-lg text-gray-900" for="{{ organization_form.name.id_for_label }}">Organization Name</label>
                    {{ organization_form.name.errors }}
                    {{ organization_form.name|add_class:"border py-2 px-3 text-grey-800 rounded-lg" }}
                </div>
                <!-- 所有者邮箱:使用表单字段渲染 -->
                <div class="flex flex-col mb-4">
                    <label class="mb-2 text-lg text-gray-900" for="{{ user_form.email.id_for_label }}">Organization Owner email</label>
                    {{ user_form.email.errors }}
                    {{ user_form.email|add_class:"border py-2 px-3 text-grey-800 rounded-lg" }}
                </div>
                <!-- 团队名称:使用表单字段渲染 -->
                <div class="flex flex-col mb-4">
                    <label class="mb-2 text-lg text-gray-900" for="{{ team_form.name.id_for_label }}">Organization Admin Team Name</label>
                    {{ team_form.name.errors }}
                    {{ team_form.name|add_class:"border py-2 px-3 text-grey-800 rounded-lg" }}
                </div>
                <button class="block bg-blue-500 hover:bg-blue-800 text-white uppercase text-lg mx-auto p-4 rounded-lg"
                        type="submit">Create organization
                </button>
            </form>
        </div>
    </div>
{% endblock %}

注:若使用add_class过滤器,需先安装并配置django-widget-tweaks库;若不想依赖第三方库,可直接用{{ organization_form.name }}并通过CSS统一设置表单样式。

3. 验证修复

重启Django服务后,提交新组织创建表单,检查数据库中Organization的name字段是否正确存储输入的组织名称,同时确认Team的name字段存储团队名称。

额外建议

  • 尽量避免手动编写input标签,使用Django表单内置渲染方式可减少字段名冲突、错误信息处理等人为问题。
  • 可通过django-widget-tweaks简化表单字段的样式定制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:22:03