ngx311
ngx311

Reputation: 507

Django form not showing-up inside Boostrap modal

I've been grappling with this for over a week, with no success. I have a registration form I want to put inside a modal. The modal renders just fine, the title, submit button, but the registration form itself ins't showing.

However when I go to mysite/register in my browser, the registration form renders perfectly....but I don't want it to render by itself in a separate tab, I need it in a modal.

Any help would be greatly appreciated.

Here's my code:

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):
    user = CustomUser.objects.get(pk=1).username

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

urls.py

urlpatterns = patterns ('', 
    url(r'register$', 'apps.accounts.views.register', name='register'),
    url(r'^profile/(?P<username>\w+/$)', get_profile, name='profile'),
)

register.html

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



{% block body %}

<div class="modal" id="modal-1">
            <div class="modal-dialog">
                <div class="modal-content">
                    <form enctype="multipart/form-data" method="post" action="">
                        <div class="modal-header">
                            <button type="button" class="close" data-dismiss="modal">&times;</button>
                            <h3 class="modal-title">Sign-up</h3>
                        </div>
                        <div class="modal-body">
                            {% csrf_token %}
                            {{ form|crispy }}
                        </div>
                        <div class="modal-footer">
                            <input type='submit' class="btn btn-primary" value="Register" />
                        </div>
                    </form>
                </div>
            </div>
</div>

{% endblock %}

base.html

.....
<li><a data-toggle="modal" data-target="#modal-1" href="">sign up</a></li>
{% include 'register.html' %}

Upvotes: 1

Views: 2077

Answers (1)

WayBehind
WayBehind

Reputation: 1697

Not sure if your indentation in your post is what you have in your views.py file but at least here is wrong and the form is not being rendered.

try this:

def register(request):
    form = RegistrationForm(request.POST or None)
    if request.method == 'POST':        
        if form.is_valid():
            CustomUser = form.save()
            CustomUser.save()
            return redirect('home.html')
    else:
        return render(request, 'register.html', {'form': form})

Upvotes: 1

Related Questions