2016-04-18 52 views
1

我一直在嘗試一切,但我不明白爲什麼它不顯示。我在這個網站的每個地方搜索都沒有運氣。按鈕顯示出來,但是當我點擊比它給我的get_profile一個類型錯誤,他說:Django - 表單不顯示在模板上只有按鈕

異常值:
get_profile()得到了一個意想不到的關鍵字參數「用戶名」

這裏是我的代碼:

models.py

class CustomUser(AbstractBaseUser): 
    email = models.EmailField('email address', unique=True, db_index=True) 
    username = models.CharField('username', max_length=50, unique=True, db_index=True) 
    first_name = models.CharField(max_length=50, blank=False) 
    last_name = models.CharField(max_length=50, blank=False) 
    joined = models.DateTimeField(auto_now_add=True) 
    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now) 

    USERNAME_FIELD = 'username' 
    REQUIRED_FIELDS = [] 

    objects = CustomUserManager() 

    def __unicode__(self): 
     return self.username 

forms.py

from django import forms 
from apps.accounts.models import CustomUser 


class RegistrationForm(forms.ModelForm): 
    email = forms.EmailField(widget=forms.TextInput, label='email') 
    username = forms.CharField(widget=forms.TextInput, label='username') 
    password1 = forms.CharField(widget=forms.PasswordInput, label='Enter your password') 
    password2 = forms.CharField(widget=forms.PasswordInput, label='Re-type your password') 
    first_name = forms.CharField(widget=forms.TextInput, label='First Name') 
    last_name = forms.CharField(widget=forms.TextInput, label='Last Name') 

    class Meta: 
     model = CustomUser 
     fields = ['email', 'username', 'password1', 'password2', 'first_name', 'last_name'] 

    def clean(self, password1, password2): 
     cleaned_data = super(RegistrationForm, self).clean() 
     if password1 in self.cleaned_data and password2 in self.cleaned_data: 
      if self.cleaned_data['password1'] != self.cleaned_data['password2']: 
       raise forms.ValidationError("Passwords don't match. Please enter both fields again") 
     return self.cleaned_data 

    def save(self, commit=True): 
     user = super(RegistrationForm, self).save(commit=False) 
     user.set_password(self.cleaned_data['password1']) 
     if commit: 
      user.save() 
     return user 

views.py

def register(request): 
    """ 
    User Registration View 
    """ 
    if request.method == 'POST': 
     form = RegistrationForm(request.POST) 
     if form.is_valid(): 
      CustomUser = form.save() 
      CustomUser.save() 
      return redirect('home.html') 
    else: 
     form = RegistrationForm() 
    return render_to_response('register.html', { 
     'form': form, 
    }, context_instance=RequestContext(request)) 

def get_profile(request): 
    username = CustomUser.username 
    return render_to_response(request, 'profile.html', {'username': username}) 

urls.py

urlpatterns = patterns ('', 
    url(r'register$', 'apps.accounts.views.register', name='register'),) 

register.html

{% load staticfiles %} 
{% load crispy_forms_tags %} 

<!DOCTYPE html> 
<html lang="en"> 
<body> 
{% block body %} 

<form method='POST' action="register" enctype= 'multipart/form-data'>{% csrf_token %} 
<table>{{ form.ast_table}}</table> 
<input type='submit' class="btn btn-default" value="Register" /> 
</form> 
{% endblock %} 
</body> 
</html> 
+0

提供完整的代碼。誰在調用'get_profile'? – Rohan

回答

1

看來,你不必爲get_profile視圖功能正確的簽名。

您應該檢查你的網址,你可能有類似

url(r'^profile/(?P<username>\w+/$', get_profile), 

如果是的話,你的觀點應該是

def get_profile(request, username): 
    #you can get the user 
    user = CustomUser.objects.get(username=username) 

    return render_to_response(request, 'profile.html', {'username': username, 'user': user}) 
+0

神聖的廢話傢伙,它的工作。非常感謝! – ngx311

+0

不錯!現在你只需要接受答案:-) – luc

0
CustomUser

是類。您需要先獲取實例,然後才能真正獲取其用戶名。

如:

CustomUser.objects.get(pk=1).username 

給你的第一個用戶的用戶名。

而且,它應該是{{form.as_table}}ast_table

+0

神聖的廢話傢伙,它的工作。非常感謝! – ngx311

相關問題