Python Django表单发布不起作用-Django只是再次呈现页面

Python Django表单发布不起作用-Django只是再次呈现页面,python,django,django-forms,django-views,Python,Django,Django Forms,Django Views,基本上,我已经建立了一个表单来创建组织。当我点击Save按钮时,它只是再次呈现页面-帖子不起作用 请参见下面的我的代码: models.py from django.db import models from accounts.models import User from datetime import datetime, date #// ------------ FUNCTIONS -------------// # Generate Organisation IDs for each

基本上,我已经建立了一个表单来创建组织。当我点击Save按钮时,它只是再次呈现页面-帖子不起作用

请参见下面的我的代码:

models.py

from django.db import models
from accounts.models import User
from datetime import datetime, date

#// ------------ FUNCTIONS -------------//

# Generate Organisation IDs for each organisation
def org_id_generate():
    last_org = Organization.objects.all().order_by('org_id').last()
    if not last_org:
        return 'ORG_001'
    else:
        last_org_id = last_org.org_id
        number_in_id = int(last_org_id[4:7])
        new_number_in_id = number_in_id + 1
        new_org_id = 'ORG_' + str(new_number_in_id).zfill(3)
        return new_org_id

#// ------------ MODELS -------------//

class Organization(models.Model):

    org_id = models.CharField(primary_key=True, max_length=7, default=org_id_generate, editable=False)
    organization_code = models.CharField(max_length=20)
    company_name = models.CharField(verbose_name="Company Name", max_length=60)
    legal_name = models.CharField(verbose_name="Legal Name", max_length=100)
    industry_distribution = models.BooleanField(verbose_name="Distribution", default=False)
    industry_education = models.BooleanField(verbose_name="Education", default=False)
    industry_healthcare = models.BooleanField(verbose_name="Healthcare", default=False)
    industry_manufacturing = models.BooleanField(verbose_name="Manufacturing", default=False)
    industry_retail = models.BooleanField(verbose_name="Retail", default=False)
    industry_services = models.BooleanField(verbose_name="Services", default=False)
    business_registration_no = models.CharField(verbose_name="Business Registration Number", max_length=15, blank=True)
    vat_registration_no = models.CharField(verbose_name="VAT Registration Number", max_length=15, blank=True)
    created_date = models.DateTimeField(default=datetime.now)
    created_by = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name="Created_By", verbose_name="Created By")
    effective_start_date = models.DateField(auto_now_add=False)
    effective_end_date = models.DateField(auto_now_add=False, blank=True, null=True)
    update_date = models.DateTimeField(default=datetime.now)
    last_updated_by = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name="Last_Updated_By", verbose_name="Last Updated By")

    def __str__(self):
        return self.company_name
forms.py

from django import forms
from organizations.models import Organization

class OrganizationAddForm(forms.ModelForm):
    class Meta:
        model = Organization
        exclude = ['created_date', 'update_date', ]
views.py

from django.shortcuts import get_object_or_404, render, redirect
from organizations.models import Organization
from forms import OrganizationAddForm
from accounts.models import User
from django.contrib.auth.decorators import login_required

@login_required()
def settings(request):
    return render(request, 'settings/settings.html')

@login_required()
def organizations_settings(request):
    orgs = Organization.objects.all()

    context = {
        'orgs': orgs,
    }
    return render(request, 'settings/settings_organizations.html', context)

@login_required
def organization_add(request):
    if request.method == 'POST':
        user_email = request.user.email
        form = OrganizationAddForm(request.POST)
        if form.is_valid():
            form.organization_code = form.cleaned_data['organization_code']
            form.company_name = form.cleaned_data['company_name']
            form.legal_name = form.cleaned_data['legal_name']
            form.business_registration_no = form.cleaned_data['brn']
            form.vat_registration_no = form.cleaned_data['vat']
            form.industry_distribution = form.cleaned_data['industry_distribution']
            form.industry_education = form.cleaned_data['industry_education']
            form.industry_healthcare = form.cleaned_data['industry_healthcare']
            form.industry_manufacturing = form.cleaned_data['industry_manufacturing']
            form.industry_retail = forms.cleaned_data['industry_retail']
            form.industry_services = form.cleaned_data['industry_services']
            form.effective_start_date = form.cleaned_data['effective_start_date']
            form.effective_end_date = form.cleaned_data['effective_end_date']
            form.created_by = form.cleaned_data[user_email]
            form.last_updated_by = form.cleaned_data[user_email]

            form.save()
            return redirect('organizations_settings')

    else:
        form = OrganizationAddForm()

    return render(request, 'settings/add_organization.html', {'form': form})
@login_required
def organization_add(request):
    if request.method == 'POST':
        form = OrganizationAddForm(request.POST)
        if form.is_valid():
            form.organization_code = form.cleaned_data['organization_code']
            form.company_name = form.cleaned_data['company_name']
            form.legal_name = form.cleaned_data['legal_name']
            form.business_registration_no = form.cleaned_data['business_registration_no']
            form.vat_registration_no = form.cleaned_data['vat_registration_no']
            form.industry_distribution = form.cleaned_data['industry_distribution']
            form.industry_education = form.cleaned_data['industry_education']
            form.industry_healthcare = form.cleaned_data['industry_healthcare']
            form.industry_manufacturing = form.cleaned_data['industry_manufacturing']
            form.industry_retail = form.cleaned_data['industry_retail']
            form.industry_services = form.cleaned_data['industry_services']
            form.effective_start_date = form.cleaned_data['effective_start_date']
            form.effective_end_date = form.cleaned_data['effective_end_date']
            
            org = form.save(commit=False)

            org.created_by = request.user
            org.last_updated_by = request.user

            org.save()
            return redirect('organizations_settings')

    else:
        form = OrganizationAddForm()

    return render(request, 'settings/add_organization.html', {'form': form})
url.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.settings, name="settings"),
    path('organizations/', views.organizations_settings, name='organizations_settings'),
    path('organization_create', views.organization_create, name="organization_create"),
    path('organizations/add/', views.organization_add, name="organization_add"),
]
页面源代码

<!-- Add Organization Form -->
<div class="container form-style">
    <a href="{% url 'organizations_settings' %}"><i class="fas fa-arrow-left"></i> Back</a>
    <div class="form-header">
        <h3>Add Organization</h3>
    </div>
    <form action="{% url 'organization_add' %}" method="POST">
        {% csrf_token %}

        <div class="container">

            <!-- Row 1 -->
            <div class="row">
                <div class="col-md-4">
                    <label for="organization_code">Organization Code<span class="star-red">*</span></label>
                    <input type="text" name="organization_code" class="form-control" required>
                </div>
                <div class="col-md-4">
                    <label for="company_name">Organization Name<span class="star-red">*</span></label>
                    <input type="text" name="company_name" class="form-control" required>
                </div>
                <div class="col-md-4">
                    <label for="legal_name">Legal Name<span class="star-red">*</span></label>
                    <input type="text" name="legal_name" class="form-control" required>
                </div>
            </div>

            <!-- Row 2 -->
            <div class="row mt-4">
                <!--                                <div class="col-md-4">
                    <label for="industry">Industry<span class="star-red">*</span></label>
                    <select name="industry" class="selectpicker">
                        <option value="distribution">Distribution</option>
                        <option value="education">Education</option>
                        <option value="healthcare">Healthcare</option>
                        <option value="manufacturing">Manufacturing</option>
                        <option value="retail">Retail</option>
                        <option value="services">Services</option>
                    </select>
                </div> -->
                <div class="col-md-6">
                    <label for="brn">Business Registration No.</label>
                    <input type="text" name="brn" class="form-control">
                </div>
                <div class="col-md-6">
                    <label for="vat">VAT Registration No.</label>
                    <input type="text" name="vat" class="form-control">
                </div>
            </div>

            <!-- Row 3 -->
            <h5 class="mt-4">Industry</h5>
            <div class="row">
                <div class="col-md-4">
                    <div class="form-check">
                        <input type="checkbox" name="industry_distribution" class="form-check-input">
                        <label for="industry_distribution" class="form-check-label">Distribution</label>
                    </div>
                </div>

                <div class="col-md-4">
                    <div class="form-check">
                        <input type="checkbox" name="industry_education" class="form-check-input">
                        <label for="industry_education" class="form-check-label">Education</label>
                    </div>
                </div>

                <div class="col-md-4">
                    <div class="form-check">
                        <input type="checkbox" name="industry_healthcare" class="form-check-input">
                        <label for="industry_healthcare" class="form-check-label">Healthcare</label>
                    </div>
                </div>
            </div>
            <div class="row mt-2">
                <div class="col-md-4">
                    <div class="form-check">
                        <input type="checkbox" name="industry_manufacturing" class="form-check-input">
                        <label for="industry_manufacturing" class="form-check-label">Manufacturing</label>
                    </div>
                </div>

                <div class="col-md-4">
                    <div class="form-check">
                        <input type="checkbox" name="industry_retail" class="form-check-input">
                        <label for="industry_retail" class="form-check-label">Retail</label>
                    </div>
                </div>

                <div class="col-md-4">
                    <div class="form-check">
                        <input type="checkbox" name="industry_services" class="form-check-input">
                        <label for="industry_services" class="form-check-label">Services</label>
                    </div>
                </div>
            </div>

            <!-- Row 4 -->
            <div class="row mt-4">
                <div class="col-md-6">
                    <label for="effective_start_date">Effective Start Date<span class="star-red">*</span></label>
                    <input type="date" name="effective_start_date" class="form-control" required>
                </div>
                <div class="col-md-6">
                    <label for="effective_end_date">Effective End Date:</label>
                    <input type="date" name="effective_end_date" class="form-control">
                </div>
            </div>

            <!-- Hidden Input - User -->
            <input type="hidden" name="user_email" />


            <div class="float-right mt-3">
                <button type="submit" class="btn btn-custom save">Save and Close</button>
            </div>

        </div>

    </form>

</div>

添加组织
{%csrf_令牌%}
组织机构代码*
机构名称*
法定名称*
商业登记号码。
增值税注册号。
工业
分布
教育类
保健
制造业
零售业
服务
生效日期*
生效日期:
保存并关闭

任何帮助都将不胜感激。如果您需要任何其他信息,请告诉我,我将编辑此帖子。

我没有找到任何用html显示错误的代码。 根据views中的函数,如果表单无效,那么它将使用表单呈现页面。 尝试将{form.errors}}添加到html文件中,看看它是否有错误?

我设法解决了它

views.py

from django.shortcuts import get_object_or_404, render, redirect
from organizations.models import Organization
from forms import OrganizationAddForm
from accounts.models import User
from django.contrib.auth.decorators import login_required

@login_required()
def settings(request):
    return render(request, 'settings/settings.html')

@login_required()
def organizations_settings(request):
    orgs = Organization.objects.all()

    context = {
        'orgs': orgs,
    }
    return render(request, 'settings/settings_organizations.html', context)

@login_required
def organization_add(request):
    if request.method == 'POST':
        user_email = request.user.email
        form = OrganizationAddForm(request.POST)
        if form.is_valid():
            form.organization_code = form.cleaned_data['organization_code']
            form.company_name = form.cleaned_data['company_name']
            form.legal_name = form.cleaned_data['legal_name']
            form.business_registration_no = form.cleaned_data['brn']
            form.vat_registration_no = form.cleaned_data['vat']
            form.industry_distribution = form.cleaned_data['industry_distribution']
            form.industry_education = form.cleaned_data['industry_education']
            form.industry_healthcare = form.cleaned_data['industry_healthcare']
            form.industry_manufacturing = form.cleaned_data['industry_manufacturing']
            form.industry_retail = forms.cleaned_data['industry_retail']
            form.industry_services = form.cleaned_data['industry_services']
            form.effective_start_date = form.cleaned_data['effective_start_date']
            form.effective_end_date = form.cleaned_data['effective_end_date']
            form.created_by = form.cleaned_data[user_email]
            form.last_updated_by = form.cleaned_data[user_email]

            form.save()
            return redirect('organizations_settings')

    else:
        form = OrganizationAddForm()

    return render(request, 'settings/add_organization.html', {'form': form})
@login_required
def organization_add(request):
    if request.method == 'POST':
        form = OrganizationAddForm(request.POST)
        if form.is_valid():
            form.organization_code = form.cleaned_data['organization_code']
            form.company_name = form.cleaned_data['company_name']
            form.legal_name = form.cleaned_data['legal_name']
            form.business_registration_no = form.cleaned_data['business_registration_no']
            form.vat_registration_no = form.cleaned_data['vat_registration_no']
            form.industry_distribution = form.cleaned_data['industry_distribution']
            form.industry_education = form.cleaned_data['industry_education']
            form.industry_healthcare = form.cleaned_data['industry_healthcare']
            form.industry_manufacturing = form.cleaned_data['industry_manufacturing']
            form.industry_retail = form.cleaned_data['industry_retail']
            form.industry_services = form.cleaned_data['industry_services']
            form.effective_start_date = form.cleaned_data['effective_start_date']
            form.effective_end_date = form.cleaned_data['effective_end_date']
            
            org = form.save(commit=False)

            org.created_by = request.user
            org.last_updated_by = request.user

            org.save()
            return redirect('organizations_settings')

    else:
        form = OrganizationAddForm()

    return render(request, 'settings/add_organization.html', {'form': form})
问题是它无法捕获“创建人”和“上次更新人”字段的用户电子邮件

这可通过以下方式解决:

org = form.save(commit=False)

org.created_by = request.user
org.last_updated_by = request.user
请注意,以下两个帖子对我有所帮助:


您好,谢谢您的回复!当我这样做的时候,我会得到以下由这个字段创建的结果。此字段上次更新是必需的。@ph4NT0这些只是表单的错误,因为您在模型中定义了
创建人
上次更新人
字段。是的,非常感谢你!我设法解决了!