2011-04-09 3 views
1

강사 인스턴스를 편집 할 수 없습니다. 새 강사 추가 꽤 작동하지만 기존 강사 인스턴스를 저장하려고하면 오류가 있습니다 : "사용자가이 사용자 이름은 이미!". 내 조회수 코드 :자신의 양식으로 사용자 인스턴스를 확장하는 방법을 편집 하시겠습니까?

@login_required 

def instructor_edit(request, userprofile_id): 
    user_group = check_user_group(request) 
    if request.user.is_authenticated(): 
     user_to_edit = User.objects.get(userprofile__id=userprofile_id) 
     try: 
      instructor_to_edit = UserProfile.objects.get(id=userprofile_id) 
     except UserProfile.DoesNotExist: 
      return Http404 
     if request.method == "POST": 
      uform = UserForm(request.POST, instance=user_to_edit) 
      form = AddInstructorForm(request.POST, request.FILES, instance=instructor_to_edit) 
      if request.POST.get('cancel'): 
       return HttpResponseRedirect('/') 
      if uform.is_valid() and form.is_valid(): 
       # adding new user 
       added_user = uform.save() 
       added_user.set_password(request.POST.get('password')) 
       grupa = Group.objects.get(name=u'instructor') 
       added_user.groups.add(grupa) 
       added_user.save() 
       # saving instructor to database 
       instructor = form.save(commit=False) 
       instructor.user = added_user 
       instructor.save() 
       form.save_m2m() 
       warning = "Instructor changed!" 
       return render_to_response('archiwum/message.html', {'warning' : warning, 'user_group' : user_group,}, context_instance = RequestContext(request)) 
      else: 
       uform = UserForm(request.POST) 
       form = AddInstructorForm(request.POST, request.FILES) 
       return render_to_response('archiwum/add_instructor.html', {'user_group':user_group, 'uform':uform, 'form':form,}, context_instance = RequestContext(request)) 
     else: 
      uform = UserForm(instance=user_to_edit) 
      form = AddInstructorForm(instance=instructor_to_edit) 
     return render_to_response('archiwum/add_instructor.html', {'user_group' : user_group, 'uform':uform, 'form' : form,}, context_instance = RequestContext(request)) 
    else: 
     warning = "You don't have permissions to do it!" 
     return render_to_response('archiwum/message.html', {'warning' : warning}, context_instance = RequestContext(request)) 

편집 : 양식도 입력합니다. Mayby 그것은 당신을 도울 것입니다! 당신이 UserForm 객체에 is_valid()를 호출하는 경우

class UserForm(forms.ModelForm): 
    username = forms.RegexField(max_length=30, regex=r'^[\[email protected]+-]+$', widget = forms.TextInput(attrs={'size': 93,}), error_messages={'required':'Proszę wpisać nazwę użytkownika!', 'invalid':'Nazwa zawiera niedozwolone znaki!'},) 
    password = forms.CharField(widget=forms.PasswordInput(attrs={'size': 93,}), error_messages={'required': 'Proszę wpisać hasło!'}) 
    confirm_password = forms.CharField(widget=forms.PasswordInput(attrs={'size': 93,}), error_messages={'required': 'Proszę powtórzyć hasło'},) 
    first_name = forms.CharField(widget = forms.TextInput(attrs={'size': 93,}), error_messages={'required': 'Proszę wpisać imię!'}) 
    last_name = forms.CharField(widget = forms.TextInput(attrs={'size': 93,}), error_messages={'required': 'Proszę wpisać nazwisko!'}) 
    email = forms.EmailField(widget = forms.TextInput(attrs={'size': 93,}), error_messages={'required': 'Proszę wpisać adres e-mail!', 'invalid':'Adres e-mail jest niepoprawny!'},) 
    is_active = forms.BooleanField(required=False, initial=True, help_text="Odznacz to pole zamiast usuwać użytkownika, żeby unieaktywnić konto.") 

    class Meta: 
     model = User 
     fields = ["username", "password", "confirm_password", "first_name", "last_name", "email",] 

    def clean_username(self):  
     username = self.cleaned_data["username"] 
     try: 
      User.objects.get(username=username) 
     except User.DoesNotExist: 
      return username 
     raise forms.ValidationError(_("Użytkownik o tej nazwie już istnieje! Wybierz inną nazwę.")) 

    def clean_confirm_password(self): 
      if self.cleaned_data['password'] != self.cleaned_data['confirm_password']: 
       raise forms.ValidationError('Popraw hasło!') 
      else: 
       if len(self.cleaned_data['password']) < 6 and len(self.cleaned_data['password']) >0: 
        raise forms.ValidationError('Hasło musi się składać przynajmniej z 6 znaków!') 


class AddInstructorForm(ModelForm): 
    #pesel = PLPESELField 
    prefix = forms.CharField(label="Tytuł naukowy", widget = forms.TextInput(attrs={'size': 30,}), required=False) 
    birth_date = forms.DateField(label="Data urodzenia", widget=SelectDateWidget(years=range(1930,2011)), required=False, error_messages={'required': 'Proszę podać datę urodzenia!', 'invalid':'Proszę podać poprawną datę!'})  
    adress = forms.CharField(label="Adres (miasto, ulica, kod pocztowy)", widget = forms.TextInput(attrs={'size': 93,}), required=False) 
    description = forms.CharField(label="Uwagi", widget=forms.Textarea(attrs={'rows': 5, 'cols': 120,}), required=False) 

    class Meta: 
     model = UserProfile 
     fields = ('second_name', 'prefix', 'instr_subjects', 'birth_date', 'adress', 'phone', 'pesel', 'account', 'photo', 'remove_the_photo', 'description', 'curriculum_vitae', 'remove_the_cv',) 
+0

이 'ValidationError'의 원인 일 가능성이 높기 때문에 여기에 양식 클래스의 코드도 포함시켜야합니다. –

답변

2

clean_username을 실행하고 주어진 usernameUser 개체가 이미/이전에 생성 된 존재하는 ValidationError 경우이 항상 발생합니다. (이는 기존 사용자를 '편집'하는 것과 같은 일을 할 수 없음을 의미합니다.)

관련 문제