2014-03-19 24 views
0

我的ModelForm的定義是這樣的,當不要求:當我創建一個新用戶Django的創建密碼時,需要用戶,編輯

class UserForm(ModelForm): 

    password = forms.CharField(required=True, label="Password", widget=forms.PasswordInput) 

所以需要密碼。不過,我想在編輯用戶時不要求它。我的編輯/添加按以下方式在views.py中處理:

@user_passes_test(lambda u: u.is_superuser) 
def add(request): 
    if request.method == 'POST': 
     form = UserForm(request.POST) 
     if form.is_valid(): 
      new_user = User.objects.create_user(form.cleaned_data['username'], form.cleaned_data['email'], form.cleaned_data['password']) 
      new_user.save() 
      messages.success(request, "User '%s' created" % new_user.username) 
      return HttpResponseRedirect('/user') 
    else: 
     form = UserForm() 
    return render(request, 'user/add.html', {"form": form}) 

@user_passes_test(lambda u: u.is_superuser) 
def edit(request, id): 
    user = User.objects.get(id=id) 
    if request.method == 'POST': 
     f = UserForm(request.POST, instance=user) 
     if f.is_valid(): 
      f.save() 
      messages.success(request, "User '%s' altered" % user.username) 
      return HttpResponseRedirect('/user') 
    else: 
     form = UserForm(instance=user) 
     return render(request, 'user/edit.html', {"form": form, "user": user}) 

感謝您的回答。

米哈爾

回答

0

這是我會做什麼:

class UserForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     is_edit = kwargs.get('is_edit', False) 
     if 'is_edit' in kwargs: 
      del kwargs['is_edit'] 
     super(UserForm, self).__init__(*args, **kwargs) 
     if is_edit: 
      self.fields['password'].required = False 

然後,在你的編輯()函數:

f = UserForm(request.POST, instance=user, is_edit=True) 

我在我們的代碼庫相當經常使用這種類型的東西。

+0

謝謝,我剛剛開始使用Python/Django,並且這教會了我很多 –

+0

謝謝你在我的答案中加入「in」。 – DavidM

相關問題