2012-03-06 87 views
0

我有用戶形式,其中有一個用戶名字段。表單中的字段是從數據庫中的數據初始化的。清潔django user.username

class PersonEditForm(forms.ModelForm): 

    username = forms.RegexField(label=_("Username"), max_length=30, regex=r'^[\[email protected]+-]+$', 
    help_text = _("Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."), 
    error_messages = {'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")}) 


class Meta: 
    model = User 

view.py

@login_required 
def edit(request, template_name): 

    if request.user.is_authenticated(): 
     if request.method == 'POST': 
      form = PersonEditForm(request.POST) 
      if form.is_valid(): 
       form.save(instance = request.POST, user = request.user) 
       return HttpResponseRedirect(reverse('/success/')) 

     else: 
      user = User.objects.get(username = request.user) 
      form = PersonEditForm(instance = user, initial = {'username': request.user.username}) 

      return render_to_response(template_name, {"form": form }, 
           context_instance = RequestContext(request)) 

登錄的用戶可以編輯的用戶名。問題是一邊寫clean_username方法我將要求request.user,檢查:

  1. 如果用戶名== request.user.username #return真正
  2. elif的用戶名= request.user! .username

    一)User.objects.get(用戶名=用戶名)#如果返回的東西,然後擡高forms.ValidationError(_( 「已被使用的用戶名。」))

    二)其他user.username =用戶名

我該如何做到這一點?

回答

3

你可以得到它在self.instance

class PersonEditForm(forms.ModelForm): 
    def clean_username(self): 
     # self.instance is your current user 

    ... 

視圖應該是這樣的

if request.user.is_authenticated(): 
    if request.method == 'POST': 
     form = PersonEditForm(request.POST, instance=request.user) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect(reverse('/success/')) 

    else: 
     form = PersonEditForm(instance=request.user, initial={'username': request.user.username}) 

    return render_to_response(template_name, {"form": form }, 
          context_instance = RequestContext(request)) 
+0

我應該如何呈現的形式?現在它說form = PersonEditForm(實例=用戶,初始= {'用戶名':request.user.username}) – 2012-03-06 13:28:57

+0

@mangobug像任何其他形式,我猜。這裏沒有任何東西會影響表單的外觀。 – DrTyrsa 2012-03-06 13:30:18

+0

它在行self.current_user = kwargs.pop('current_user') – 2012-03-06 13:32:33