ngx311
ngx311

Reputation: 507

Django - Form not showing up on template only the button

I've been trying everything, but I can't figure out why it's not showing-up. I searched everywhere on this site with no luck. The button shows up but when I click than it give me a TypeError at get_profile, saying:

Exception Value:
get_profile() got an unexpected keyword argument 'username'

Here's my code:

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>

Upvotes: 1

Views: 920

Answers (2)

luc
luc

Reputation: 43146

It seems that you don't have the right signature for the get_profile view function.

You should check your urls, you probably have something like

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

If so, your view should be

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}) 

Upvotes: 1

sudshekhar
sudshekhar

Reputation: 1666

CustomUser is the class. You need to fetch an instance before you can actually fetch its username.

Eg:

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

Gives you the username of the first user.

Also, its supposed to be {{form.as_table}} not ast_table

Upvotes: 0

Related Questions