2013-09-27 3 views
1

OrderAmount 필드의 유효성 검사를 건너 뛰어도 무효화 된 데이터를 저장해야합니다. 이것이 할 수있는 방법이 있습니까? 나는 장고가 당신 자신의 밸리데이션을 허용한다는 것을 알고 있지만, 나는 한 필드의 밸리데이션을 완전히 건너 뛰는 방법을 모른다.django 필드의 유효성 검사 건너 뛰기

모델 :

class LiquorOrder(models.Model): 

    pack_size = (
       ('1', '1'), 
       ('2', '2'), 
      ) 

    LiquorOrderID = models.AutoField(primary_key=True) 
    storeliquorID = models.ForeignKey(StoreLiquor) 
    orderID = models.ForeignKey(Order) 
    OrderAmount = models.PositiveSmallIntegerField('Order Amount', max_length=3, choices=pack_size) 
    TotalPrice = models.DecimalField('Total Price', max_digits=5, decimal_places=2) 

형태 : 장고가하는 유일한 유효성 검사 값을 확인하는 PositiveSmallIntegerField를 들어

class AddToOrderForm(forms.ModelForm): 

    class Meta: 
     model = LiquorOrder 
     fields = ('OrderAmount',) 

답변

0

참으로 적절한 범위 내에서 양의 정수이다. 이것을 건너 뛰려면 장고가 데이터베이스에 값을 쓰려고 할 때 문제가 발생합니다. 정수를 예상하는 DB 열에 "marshmallows"값을 쓰려고하면 DB에서 오류가 발생하고 Django가 돌아가서 IntegrityError을 던질 것입니다.

정말 원했고 경우 False (기본적으로 모든 키보드 입력을 허용)에 필요한 설정과 CharField가 될 현장을 무시할 수 :

class AddToOrderForm(forms.ModelForm): 
    OrderAmount = forms.CharField(required=False) 

장고 당신이 is_valid()를 실행할 때 다음 True을 반환하지만, save()에 전화를 걸 때 오류가 발생합니다.


실제 문제는 현재 프로젝트 요구 사항과 일치하지 않는 모델의 문제입니다. 이 경우 새 모델로 마이그레이션하십시오. 파이썬 라이브러리 South은이 목적을위한 훌륭한 도구이며 Django 커뮤니티에서 많이 사용됩니다. DB 마이그레이션에 대해 읽어보고 그런 식으로 해결할 수 있는지 알아 봅니다.