所以我使用React和Django。我目前在提交表单时遇到问题,因为我遇到了奇怪的错误Exception Value: Value too long for type character varying(2)
编辑:当USStateField
为空并且输入了正确的两个字母缩写时,仍然会发生错误
有关模型的Models.py:
@python_2_unicode_compatible
class Member(models.Model):
class Meta:
ordering = ('last_name', 'first_name')
first_name = models.CharField(max_length=50, db_index=True)
last_name = models.CharField(max_length=50, db_index=True)
dob = models.DateField(verbose_name='Date of Birth', null=True, blank=True,
help_text='format: 1999-12-31')
card_number = models.CharField(max_length=10, help_text="The ID number on the membership card", unique=True)
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
latest_membership = models.ForeignKey('Membership', null=True, blank=True, related_name='latest_member')
email = models.EmailField(blank=True)
phone = PhoneNumberField(blank=True)
street_1 = models.CharField(max_length=200, blank=True)
street_2 = models.CharField(max_length=200, blank=True)
city = models.CharField(max_length=100, blank=True)
state = USStateField(choices=us_states, blank=True)
zip_code = models.CharField(max_length=16, blank=True)
us_states
已导入:from localflavor.us import us_states
我看到有些字段带有max_length
,但我知道我没有违反约束
反应形式的API:
def redesign_member_form(request):
if request.method == 'POST':
errors = {}
try:
data = json.loads(request.body)
data["dob"] = parse(data["dob"])
print("dob parsed")
Member.objects.create(**data)
except Exception as e:
errors["error"] = e.message
return JsonResponse(errors, status=400)
return HttpResponse(status=200)
else:
return HttpResponse(status=400)
反应形式:
import React from 'react';
import Form from '../../components/form/Form';
import { FormContext } from '../../components/form/Form';
import FormDropdown from '../../components/form/FormDropdown';
import FormDatePicker from '../../components/form/FormDatePicker';
import FormInput from '../../components/form/FormInput';
import FormButton from '../../components/form/FormButton';
import styles from "./Memberships.module.css"
import { setBanner } from '../../util/utils';
import { genericValidator, emailValidator } from '../../util/formValidation';
export default function MemberForm(props) {
setBanner("Member Form", "/helm/members/member/add/");
return (
<div className={`${styles.container}`}>
<h1 className={`${styles.title}`}>New Member</h1>
<Form action="/memberships/api/make_member/">
<FormContext.Consumer>
{ ({ failMessage, successMessage }) => {
return (
failMessage ? <div className={`${styles.error} ${styles.message}`}> { failMessage }</div> : null
);
}}
</FormContext.Consumer>
<div className={`${styles.left}`}>
<div className={`${styles.input}`}>
<FormInput
name="first_name"
label="First Name"
validator={genericValidator({required: true})}
/>
</div>
<div className={`${styles.input}`}>
<FormInput
name="last_name"
label="Last Name"
validator={genericValidator({required: true})}
/>
</div>
<div className={`${styles.input}`}>
<FormInput
name="phone"
label="Phone Number"
validator={genericValidator({required: false, type: "number"})}
/>
</div>
<div className={`${styles.input}`}>
<FormDatePicker
name="dob"
label="Date of Birth"
peekNextMonth={true}
showMonthFormDropdown={true}
showYearFormDropdown={true}
FormDropdownMode={"select"}
validator={genericValidator({required: false})}
/>
</div>
<div className={`${styles.input}`}>
<FormInput
name="email"
label="Email"
validator={emailValidator({required: false})}
/>
</div>
<div className={`${styles.input}`}>
<FormInput
name="card_number"
label="Card"
validator={genericValidator({required: true, type: "number"})}
/>
</div>
</div>
<div className={`${styles.right}`}>
<div className={`${styles.input}`}>
<h1 className={`${styles.subtitle}`}>Address</h1>
</div>
<div className={`${styles.input}`}>
<FormInput
name="street_1"
label="Street 1"
validator={genericValidator({required: false})}
/>
</div>
<div className={`${styles.input}`}>
<FormInput
name="street_2"
label="Street 2"
validator={genericValidator({required: false})}
/>
</div>
<div className={`${styles.input}`}>
<FormInput
name="city"
label="City"
validator={genericValidator({required: false})}
/>
</div>
<div className={`${styles.input}`}>
<FormDropdown
name="state"
label="State"
validator={genericValidator({required: false})}
/>
</div>
<div className={`${styles.input}`}>
<FormInput
name="zip_code"
label="Zip Code"
validator={genericValidator({required: false, type: "number"})}
/>
</div>
</div>
<FormButton className={`${styles.submit_button}`} text="Submit" />
</Form>
</div>
)
}
让我知道,如果有任何其他代码,将是有益的
USStateField
被建模为带有max_length=2
的CharField
我猜你是想保存整个州的名字,而不是它的两个字母的缩写(as listed here)
您的导入错误:
from localflavor.us.us_states import US_STATES
并在模型中使用US_状态而不是
from localflavor.us import us_states
相关问题 更多 >
编程相关推荐