2017-02-19 1 views
0

모델 판매자의 (고유 한) mobileno를 확인하려고합니다. 하지만 오류가 발생하여 원하는 작업을 수행하지 못했습니다.
mobileno의 고유성이 양식에서 검사되도록하려면 어떻게해야합니까?
다음은 내 model.py입니다 :장고의 판매자 모델에서 고유 한 휴대폰 번호를 확인하는 방법

class Seller(models.Model): 
    mobilenno = models.DecimalField(max_digits=10, decimal_places=0, unique=True) # Field name made lowercase. 
    password = models.CharField(max_length=64) 
    name = models.CharField(max_length=64) 
    # city = models.ForeignKey(City) 
    address = models.CharField(max_length=512, blank=True, null=True) # Field name made lowercase. 
    phoneno = models.DecimalField(max_digits=10, decimal_places=0, blank=True, null=True) # Field name made lowercase. 

및 form.py

class SellerRegistrationForm(forms.Form): 

    mobileno1 = forms.DecimalField(widget=forms.TextInput(attrs=dict(required=True, max_length=30)), 
            max_digits=10, decimal_places=0,label=_("Mobile Number")) 
    password1 = forms.CharField(widget=forms.PasswordInput(attrs=dict(required=True, max_length=30, render_value=False)), 
           label=_("Password")) 
    password2 = forms.CharField(widget=forms.PasswordInput(attrs=dict(required=True, max_length=30, render_value=False)), 
           label=_("Password (again)")) 
    name = forms.CharField(widget=forms.TextInput(attrs=dict(required=True, max_length=30)), 
           label=_("Seller Name")) 
    address = forms.CharField(widget=forms.TextInput(attrs=dict(required=True, max_length=30)), 
           label=_("Seller Address")) 
    phoneno = forms.DecimalField(widget=forms.TextInput(attrs=dict(required=True, max_length=30)), 
           max_digits=10, decimal_places=0, label=_("Phone Number")) 

    def clean_mobileno1(self): 

     try: 
      Seller.objects.get(mobileno=self.cleaned_data['mobileno1']) 
     except Seller.DoesNotExist: 
      return self.cleaned_data['mobileno1'] 
     raise forms.ValidationError(_("The mobilenumber already exists. Please try another one.")) 

    def clean(self): 
     if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data: 
      if self.cleaned_data['password1'] != self.cleaned_data['password2']: 
       raise forms.ValidationError(_("The two password fields did not match.")) 
     return self.cleaned_data 

views.py

def seller_register(request): 
    if request.method == 'POST': 
     form = SellerRegistrationForm(request.POST) 
     if form.is_valid(): 
      Seller.objects.create(
       mobilenno=form.cleaned_data['mobileno1'], 
       password=form.cleaned_data['password1'], 
       name=form.cleaned_data['name'], 
       address=form.cleaned_data['address'], 
       phoneno=form.cleaned_data['phoneno'] 
      ) 
      return HttpResponseRedirect('/register/success/') 
    else: 
     form = SellerRegistrationForm() 

    return render(request,'registration/register.html', {'form': form }) 

답변

0

그것은 당신이 얻고있는 어떤 오류 분명하지 않다, 그래서 ' 어디서 오류인지 모르겠지만 clean_mobileno1은 좋은 후보자처럼 보입니다. mobilennomobileno1 사이의 명명 일관성을 확인하십시오.

해당 함수의 논리를 따라하기가 어렵습니다. "일반적인"유스 케이스에 대한 예외를 잡으려고 시도한 다음 첫 번째 캐치를 catch하지 않으면 예외를 발생 시키려고합니다. 이는 직관적 인 것처럼 보입니다. 또한 파이썬에서 unity를 확인하고 있습니다. 실제로 데이터베이스에 푸시되어야합니다 (필드 정의의 unique=True).

Decimal 대신 전화 번호로 https://github.com/stefanfoulis/django-phonenumber-field을 사용하시기 바랍니다. 실제 전화 번호 확인과 매우 유용한 전화 관련 기능이 제공됩니다. 백엔드는 Android의 전화 번호 라이브러리를 기반으로하므로 최신 상태를 유지하는 경향이 있습니다.

귀하의 모델이된다 :

from phonenumber_field.modelfields import PhoneNumberField 

class Seller(models.Model): 
    mobileno = PhoneNumberField(unique=True) 
    ... 

을 또한, 당신은 아마 양식에 대한 ModelForm을 사용해야합니다

class SellerRegistrationForm(forms.ModelForm): 
    class Meta: 
     model = Seller 

    ... 
+0

는 내가 설정하려면 정규 표현식 –

+0

모바일 없음을 저장하는 문자 필드를 사용할 수 필드 기본값은 10 자리/문자입니다. –

+0

잠시 동안 주변에 있었고 작동이 입증 된 무언가로 유스 케이스가 다루어지지 않는 한 분명히 할 수 있습니다. –

관련 문제