2016-11-03 7 views
0

私はユーザーのテーブルをプロファイルテーブルで拡張しましたが、ユーザーサイトの登録はユーザータイプ "customer"の電子メールとパスワードのみを要求し、ユーザータイプ "promotor"出身、住所、国、都道府県、市などのような他のフィールドも必要です。ログイン後、アカウント設定ページに行くと、両方のタイプのアカウント設定ページが同じです。そのため、アカウント設定で作成した単一のジャンゴ形式。ユーザーはdjango形式のプロフィールを持っていません

class userAccountSettingsForm(forms.Form): 
     email = forms.EmailField(required = True, max_length=50, widget=forms.EmailInput(attrs={ 
      'class' : 'custome-input promote-input', 
      'autocomplete' : 'off', 
      'data-empty-message' : 'Please enter a email.', 
      'data-error-message' : 'Please enter a valid email.', 
      'readonly' : 'readonly' 
     })) 
     firstname = forms.CharField(required = True, max_length=50, widget=forms.TextInput(attrs={ 
      'class' : 'custome-input promote-input', 
      'autocomplete' : 'off', 
      'data-empty-message':'Please enter first name.' 
     })) 
     lastname = forms.CharField(required = True, max_length=50, widget=forms.TextInput(attrs={ 
      'class' : 'custome-input promote-input', 
      'autocomplete' : 'off', 
      'data-empty-message':'Please enter last name.' 
     })) 
     dob = forms.DateField(required = False, widget=forms.DateInput(attrs={ 
      'class' : 'custome-input promote-input', 
      'id' : 'custom-datepicker', 
      'autocomplete' : 'off', 
      'readonly':'readonly' 
     })) 
     phone = forms.IntegerField(required = True, widget=forms.TextInput(attrs={ 
      'class' : 'custome-input promote-input', 
      'autocomplete' : 'off', 
      'data-empty-message':'Please enter mobile number.' 
     })) 
     address = forms.CharField(required = False, max_length=225, widget=forms.TextInput(attrs={ 
      'class' : 'custome-input promote-input', 
      'autocomplete' : 'off' 
     })) 
     subscription = forms.BooleanField(required = False) 

事プロモーターの登録中に、それはまた、プロファイルテーブルでその行を作成し、顧客の登録中にそれだけで、ユーザーテーブルの行を作成することで、アカウント設定ページで、私はからユーザーのデータを見つけるために持っている理由厥ので、

dobForm="" 
if my_details.profile.dob: 
    dobForm = datetime.strptime(str(my_details.profile.dob), '%Y-%m-%d').strftime('%m/%d/%Y') 
settingsForm = userAccountSettingsForm(
    initial={ 
     'email': my_details.email, 
     'firstname': my_details.first_name, 
     'lastname': my_details.last_name, 
     'dob': dobForm, 
     'phone':my_details.profile.phone_number, 
     'address':my_details.profile.address, 
     'subscription':my_details.profile.subscription, 
     } 
    ) 

だから、ユーザーのすべての既存のデータをフェッチこのページを使用して、そうでないユーザー型プロモーターの場合には - :モデル、私はビューでDjangoのフォームの助けを借りてこれをやっているが、ここでは、ビューの私のコードです登録時にプロファイルテーブルのプロモータ用に生成された行がすでに存在するため問題は発生しますが、顧客の場合はrを生成しませんOW登録、この場合には、それがエラーを与えながら、プロファイルテーブルの顧客のために: -

RelatedObjectDoesNotExist at /home/account-settings 

    User has no profile 

以外にも、顧客の登録一方、プロファイルテーブルに行を作成するから、この問題の他の解決策はありますか?

+0

この場合の解決方法はありますか? –

+0

この 'if my_details.profile.dob:'を 'hasattr(my_details、 'profile')'に変更してみてください。 – Sagar

答えて

0

オブジェクトが存在しない場合、OneToOneFieldはこの例外を送出します。だからあなたはその例外を捕まえなければなりません。

コメントはSagarの示唆したように、hasattrを使用することもできますが、issuesの場合は<を使用してください。

関連する問題