1

ユーザーが自分でプロフィールアカウント情報を変更するためのフォームを作成しようとしています。現在、私はそれを持っているので、彼らは最初、最後、ユーザー名、性別、「生年月日」を更新できます。「生年月日」は私が必要とされないようにすることができない唯一のものです。現在、私のフォームはどのフォームフィールドにも入力がないかどうかをチェックし、変更が加えられていない場合はユーザー情報を更新しません。

~~ Models.py ~~

class Account(models.Model):
    user               = models.OneToOneField(User)      #link (pointer) to the users     other information in User model                                        
    birthdate          = models.DateField(blank = True, null = True) # True makes this field optional                                                        
    gender             = models.CharField(max_length = 10, choices = GENDER_CHOICE, null = True, blank = True)
    profilePic         = models.ImageField(upload_to = "profilepics/%Y/%m/%d", default = "profilepics/default.jpg", blank = True)

-ユーザー設定の変更を収集するためのフォーム

class EditAccountForm(forms.Form):
    username           = forms.CharField(max_length = 30, required = False)
    first_name         = forms.CharField(max_length = 30, required = False)
    last_name          = forms.CharField(max_length = 30, required = False)
    birthdate          = forms.DateField(widget = SelectDateWidget(required = False, years = range(2022, 1930, -1))) # make birthdate drop down selectable    
    gender             = forms.CharField(max_length = 10, widget=forms.Select(choices = GENDER_CHOICE),)# null = True)                 

~~ Views.py

def AccountSettings(request):
    sluggedSettingError = request.GET.get('error', '') # error message with slugged character                                                                
    settingError = sluggedSettingError.replace('-', ' ')
    # form variable may need to be inside below if statement                                                                                                 
    settingForm = EditAccountForm(request.POST or None) # variable is called in edit_user.html                                                               
    if request.method == 'POST':
        if settingForm.is_valid():

            userSettings = request.user.get_profile() # returns the current settings of the users profile 
if request.POST['gender'] == '---':
                print "Gender was not changed"
            else:
                userSettings.gender = request.POST['gender']  # add a check for birthdate submission                                                         
            userSettings.birthdate = settingForm.cleaned_data.get('birthdate')   # currently requires input format YYYY-mm-dd                                
            # check if the first name submission is not changed                                                                                              
            if request.POST['first_name'] == '':
                print "First name not changed"
            else:
                userSettings.user.first_name = request.POST['first_name']
            # check if the last name submission is not changed                                                                                               
            if request.POST['last_name'] == '':
                print "Last name not changed"
            else:
                userSettings.user.last_name = request.POST['last_name']
            # check if the username submission is not changed                                                                                                
            if request.POST['username'] == '':
                print "Username not changed"
            else:
                userSettings.user.username = request.POST['username']
            # check if the ProfilePicture submission is not changed                                                                                          
#                if request.POST['profilePic'] == None:
#                    print "Profile picture not changed"
#                else:
#                    userSettings.profilePic = request.POST['profilePic']
            userSettings.user.save()              # save the changes to the fields in used from the auth library                                             
            userSettings.save()                   # save the altered and unaltered settings                                                                  
            return HttpResponseRedirect('/')
    return render_to_response("user_settings.html", {'settingForm': settingForm, 'settingError': settingError}, context_instance = RequestContext(request))

SelectDateWidget()を使用しているときに、birthdateフィールドを不要にする方法はありますか?これは、required=Falseの現在の試みが機能しないためです。または、ユーザーが設定を編集して変更を送信できるようにするためのより良い方法はありますか?

よろしくお願いします。

4

1 に答える 1

2

私はあなたの問題が次の事実から派生していると思います:

settingForm.cleaned_data.get('birthdate')

は返されませんが、DateまたはDateTimeフィールドが期待するものではないNone空の文字列を渡します。''

ユーザーが実際に日付を選択していない場合は、NoneTypeを返す必要があります。

于 2012-06-04T20:56:58.410 に答える