【问题标题】:My Django form is not valid我的 Django 表单无效
【发布时间】:2015-06-24 20:54:43
【问题描述】:

我在使用 Django 表单时遇到问题。我找不到错误以及如何修复它。

模型.py

from django.db import models
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin,
BaseUserManager
from django.core.validators import RegexValidator
from django import forms

class Person(models.Model):
person_userid=models.ForeignKey(User)
person_availability_choices=(
    ('M', 'Monday'),
    ('T', 'Tuesday'),
    ('W', 'Wednesday'),
    ('Th', 'Thursday'),
    ('F', 'Friday'),
    ('Sat', 'Saturday'),
    ('Sun', 'Sunday'),
)
person_availability=models.CharField(max_length=9, choices=person_availability_choices)
person_salutation_choices=(
    ('Mr.', 'Mr.'),
    ('Mrs.', 'Mrs.'),
    ('Ms.', 'Ms.'),
    ('Dr.', 'Dr.'),
)
person_salutation=models.CharField(max_length=4, choices=person_salutation_choices)
person_first_name=models.CharField(max_length=50)
person_middle_name=models.CharField(max_length=50)
person_last_name=models.CharField(max_length=50)
person_date_of_birth=models.DateField(null=True, blank=True)
person_address_street=models.CharField(max_length=50)
person_address_suite=models.IntegerField(max_length=10)
person_address_city=models.CharField(max_length=50)
person_address_state=models.CharField(max_length=2)
person_address_zip=models.IntegerField(max_length=10)
person_address_county=models.CharField(max_length=25)
person_live_within_bloom=models.CharField(max_length=1, choices=yes_no)
person_home_phone=models.IntegerField(max_length=10)
person_cell_phone=models.IntegerField(max_length=10)
person_work_phone=models.IntegerField(max_length=10)
person_email=models.CharField(max_length=50)
person_second_email=models.CharField(max_length=50)
person_communication_preference_choices=(
    ('Phone','Phone'), 
    ('Email', 'Email'), 
    ('Text', 'Text'),
)
person_communication_preference=models.CharField(max_length=10, choices=person_communication_preference_choices)
person_dob=models.DateField()
person_entered_in_donor_database=models.CharField(max_length=1, choices=yes_no)
person_community_member=models.CharField(max_length=1, choices=yes_no)
person_participation_start_date=models.DateField()
person_participation_end_date=models.DateField()
person_reason_for_leaving_choices=(
    ('Moving', 'Moving'), 
    ('Financial', 'Financial'), 
    ('Medical', 'Medical'), 
    ('Graduated', 'Graduated'), 
    ('CSH', 'Completed Service Hours'), 
    ('Other', 'Other'),
)
person_reason_for_leaving=models.CharField(max_length=20, choices=person_reason_for_leaving_choices)
person_note=models.TextField(max_length=500)

class Volunteer(Person):
volunteer_types=(
    ('Program', 'Program'),
    ('Admin', 'Admin'),
    ('Committee', 'Committee'),
)
person_volunteer_type=models.CharField(max_length=10, choices=volunteer_types)

volunteer_allergies=models.CharField(max_length=100)
volunteer_medications=models.CharField(max_length=100)
volunteer_health_notes=models.CharField(max_length=100) 
volunteer_high_school_grad_date=models.DateField(null=True, blank=True) # replace null = True.... with name as done for date_of_birth
volunteer_college_name=models.CharField(max_length=50)
volunteer_college_grad_date=models.DateField(null=True, blank=True)
volunteer_orientation_date=models.DateField(null=True, blank=True)
leader_training1_start_date=models.DateField(null=True, blank=True)
leader_training1_end_date=models.DateField(null=True, blank=True)
leader_training2_start_date=models.DateField(null=True, blank=True)
leader_training2_end_date=models.DateField(null=True, blank=True)
stable_manager_training_start_date=models.DateField(null=True, blank=True)
stable_manager_training_end_date=models.DateField(null=True, blank=True)
volunteer_community_member=models.CharField(max_length=1, choices=yes_no)
volunteer_board_member=models.CharField(max_length=1, choices=yes_no)
volunteer_board_member_start_date=models.DateField(null=True, blank=True)
volunteer_board_member_end_date=models.DateField(null=True, blank=True)
volunteer_horse_experience=models.CharField(max_length=1, choices=yes_no)
volunteer_horse_experience_details=models.CharField(max_length=100)
volunteer_experience_with_disabilities=models.CharField(max_length=1, choices=yes_no)
volunteer_experience_with_disabilities_details=models.CharField(max_length=100)
volunteer_computer_skills_details=models.CharField(max_length=100)
volunteer_facility_maintenance_experience_details=models.CharField(max_length=100)
volunteer_construction=models.CharField(max_length=1, choices=yes_no)
volunteer_lift_fifty_lbs=models.CharField(max_length=1, choices=yes_no)
volunteer_language_proficiency=models.CharField(max_length=50)
volunteer_CPR_trained=models.CharField(max_length=1, choices=yes_no)
volunteer_landscaping=models.CharField(max_length=1, choices=yes_no)
volunteer_skill_fundraising=models.CharField(max_length=1, choices=yes_no)
volunteer_skill_PR=models.CharField(max_length=1, choices=yes_no)
volunteer_skills_other=models.CharField(max_length=500)
volunteer_of_month_recognition=models.DateField(null=True, blank=True)
volunteer_of_year_recognition=models.DateField(null=True, blank=True)
#volunteer_personid=models.ForeignKey(Person)

views.py

def volunteer_form(request):
    if request.method == 'POST':
        form = VolunteerForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponse('<script language="JavaScript"> alert("You have sucessful created a new Volunteer"); location.href="http://127.0.0.1:8000/login/volunteer_form/" </script>')
            #return HttpResponseRedirect('/')

    else:
        detail_id = request.GET['id']
        query_results = User.objects.filter(id = detail_id)
        form = VolunteerForm()  
        return render(request, 'loginPortal/volunteer_form.html', {'form' : form, 'query_results' : query_results})

forms.py

from django.db import models
from django.forms import ModelForm
from loginPortal.models import Volunteer, Client

class VolunteerForm(ModelForm):
    class Meta:
        model = Volunteer

class ClientForm(ModelForm):
    class Meta:
        model = Client

所以我收到表单未验证的错误。我找不到错误。如果有人可以帮助我,我会很高兴

【问题讨论】:

    标签: python django forms validation


    【解决方案1】:

    它是forms.py,你引用的是:

    model = Client
    

    ...在上面进行导入之后。您在 models.py 中没有名为“Client”的模型,而是有一个名为“Person”的模型。

    【讨论】:

    • 不,抱歉,我有模型客户端,但我没有发布所有模型文件。表格和模型客户端类似于志愿者,但我现在什么也没做,问题出在我的志愿者身上,程序一直说表格无效。
    • 正确的错误是我没有 HttpResponse,但是它出现是因为它没有通过“is_valid”测试。我不知道如何解决它。
    【解决方案2】:

    你的视图的最后一部分应该是这样的:

    else:
        form = VolunteerForm()  
    detail_id = request.GET['id']
    query_results = User.objects.filter(id = detail_id)
    return render(request, 'loginPortal/volunteer_form.html', {'form' : form, 'query_results' : query_results})
    

    只有form 定义应该在else 内,其余的都应该在该块之外。

    【讨论】:

    • 我明白你的意思,但是,这不是问题在这里我用它来加载一个带有前一个数据的空表单,当我第一次加载表单时,我没有任何问题。我的问题仅在我尝试保存数据时出现。我加载表单没有任何问题。
    • 因为表单无效,并且您的代码在这种情况下不会返回响应。此代码修复了该问题,因此您将错误显示给用户。
    • 不起作用。因为我的表单没有通过“GET id”。
    • 为什么你还是将 id 作为 GET 参数传递,而不是作为 URL 的一部分?
    • 我正在使用不同的表单创建一个新用户,而不是通过 get 将用户 ID 传递给此表单。所以我可以通过志愿者表格来参考用户 ID。因此,当我第一次加载志愿者表格时,我有 ID,这就是视图代码上的“其他”情况。当我填写志愿者表格并通过 POST 发送时,我收到了我的表格无效的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 2021-07-26
    相关资源
    最近更新 更多