异常值:值太长,无法更改类型字符(2)

2024-09-30 18:34:44 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我使用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>
  )
}

让我知道,如果有任何其他代码,将是有益的


Tags: namefromimportdivtrueinputmodelsrequired
2条回答

USStateField被建模为带有max_length=2CharField

我猜你是想保存整个州的名字,而不是它的两个字母的缩写(as listed here

您的导入错误:

from localflavor.us.us_states import US_STATES并在模型中使用US_状态

而不是from localflavor.us import us_states

相关问题 更多 >