Ahmed Wagdi
Ahmed Wagdi

Reputation: 4401

How to add required extra fields to Django registration form

I found some similar question but no one never asked how to make it required fields! I have created a registration form with some extra fields, but I need to force the user to use those fields, and to raise a required error if he leaves it empty

here are my files :

forms.py

class SignUpForm(UserCreationForm):
    class Meta:
        model = User
        fields = ('username', 'first_name','email', 'password1', 'password2', )
        labels = {
            'username': 'إسم المستخدم',
            'first_name': 'إسمك الحقيقى(سيظهر كأسم البائع)',
            'email': 'البربد الإلكترونى Email',
            'password1': 'كلمة المرور',
            'password2': 'تأكيد كلمة المرور'

views.py

def signup(request):
    current_user = request.user
    all_dress = Item.objects.all()
    all_dress_s = Item.objects.all().filter(dress_special=True)
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=username, password=raw_password)
            login(request, user)
            return redirect('home')
    else:
        form = SignUpForm()

    context = {
            'form': form,
            'all_dress': all_dress,
            'all_dress_s': all_dress_s,
                }
    return render(request, 'fostania/signup.html',context)

signup.html

          <form method="post" align="right">
    {% csrf_token %}
    {% for field in form %}
      <p>
        {{ field.label_tag }}<br>
        {{ field }}
        {% for error in field.errors %}
          <p style="color: red">{{ error }}</p>
        {% endfor %}
      </p>
    {% endfor %}
    <button type="submit" class="btn btn-success">تسجيــل</button><br>
  بالضغط على تسجيل انت توافق على شروط الإستخدام الخاصة بموقعنا !
  </form>

Now I need to make the first_name and email field required for the registration to complete .. how to do that!

Upvotes: 0

Views: 1625

Answers (2)

Maulik Harkhani
Maulik Harkhani

Reputation: 420

I think you cant overwrite to django default user but you can abstract it

and for required in form you can write widgets and add all html like class id and many more

class RegistrationForm(UserCreationForm):
class Meta:
    model = User
    fields = {
        'username',
        'first_name',
        'last_name',
        'email',
        'password1',
        'password2',
    }
    widgets = {
        'username':forms.TextInput(attrs={'class':'form-control'}),
        'first_name':forms.TextInput(attrs={'class':'form-control', 'required':'required'}),
        'last_name':forms.TextInput(attrs={'class':'form-control', 'required':'required'}),
        'email':forms.EmailInput(attrs={'class':'form-control', 'required':'required'}),
        'password1':forms.PasswordInput(attrs={'class':'form-control'}),
        'password2':forms.PasswordInput(attrs={'class':'form-control'}),
    }

Upvotes: 1

Philipp Zettl
Philipp Zettl

Reputation: 196

In Django you can extend Forms by adding new FormFields, for example:

class SignUpForm(UserCreationForm):
    username = forms.CharField(required=True)
    class Meta:
        model = User
        fields = ('username', 'first_name','email', 'password1', 'password2', )
        ...

Upvotes: 4

Related Questions