2012-04-27 2 views
1

전화 번호를 묻는 양식이 있습니다. [0-9] 숫자 만 데이터베이스에 저장되도록해야합니다. 장고에서 Django 모델 - 데이터베이스 용 데이터 준비

는 말한다 documentation :

당신은 무엇을 저장할 발생하면?

3) 데이터베이스의 데이터를 준비하십시오. 각 필드는 현재 값을 데이터베이스에 기록 할 수있는 데이터 유형으로 제공하도록 요청됩니다.

어떻게 될까요? 또는 더 구체적으로 어떻게 이것이 청소되었는지 확인할 수 있습니까? 나는 모델 저장 방법을 오버라이드 할 수 있다는 것을 알고 있지만 더 나은 방법이있는 것처럼 보이고 어떻게해야할지 모르겠다.

나는 사용자 정의 필드를 쓸 수 있다고 생각하지만 과장된 것 같습니다.

또한 폼에 유효성 검사를 할 수 있다는 것을 알고 있지만 실제로 모델에 속한 문자를 제거하는 것처럼 느껴집니다.

당신은 당신의 객체 모델에 사용자 지정 양식 청소 방법을 추가 할 수 있습니다

답변

2

점 3에 대한 질문은 장고가 용어를 사용하는 방식에서 "청소"와 조금 다릅니다.

3) 데이터베이스의 데이터를 준비하십시오. 각 필드는 현재 값을 데이터베이스에 기록 할 수있는 데이터 유형으로 제공하도록 요청됩니다.

포인트 3은 파이썬 객체 값을 데이터베이스에 적합한 것으로 변환하는 것입니다. 특히이 Field.get_prep_value에서 수행되고 Field.get_db_prep_value

https://docs.djangoproject.com/en/dev/howto/custom-model-fields/#django.db.models.Field.get_prep_value

그것은 DB 값을 취하고 파이썬 객체로 변환 to_python의 반대이다. Fieldclean 방법 (서브 클래스 IntegerField) 형태 clean 방법, 형태 clean_FIELDNAME 방법, 모델 clean에서 수행 될 경우에만 숫자 0-9 저장 얻을 보장에 관해서는

.

1

-

0

사용 아래 django model form + custom form field cleaning

"특정 필드 속성을 청소"에서 https://docs.djangoproject.com/en/dev/ref/forms/validation/#form-field-default-cleaning

봐이 문서에서 살펴 찾고자하는 것의 빠른 예입니다. 여기서 MyModel은 전화 번호 필드가 포함 된 모델입니다.이 모델의 전화 번호는 tel입니다.

import re 

class MyForm(ModelForm): 
    class Meta: 
     model = MyModel 

    def clean_tel(self): 
     tel = self.cleaned_data.get('tel', '') # this is from user input 

     # use regular expression to check if tel contains only digits; you might wanna enhance the regular expression to restrict the tel number to have certain number of digits. 
     result = re.match(r'\d+', tel) 
     if result: 
      return tel # tel is clean so return it 
     else: 
      raise ValidationError("Phone number contains invalid character.") 
관련 문제