I have a form like this

What is the best way to validate for an already existing User when
using the django.contrib.auth.models.User and the new forms
authentication system?

Overiding Form.clean(), and adding some uniqueness validation code
works, but binds the form to the DB.  There's not much way around
that, I'm guessing.  But is there a better approach?

Details to question below---------------------->

class NewAccountForm(forms.Form):
    username = forms.EmailField()
    password = forms.CharField(widget=forms.PasswordInput)

I have it all working fine from a view like this

from django.contrib.auth.models import User
import logging as log

def create_account(request):
    if request.method == 'GET':
        form = NewAccountForm()
    elif request.method == 'POST':
        form = NewAccountForm(request.POST)
        if form.is_valid():
            data = form.cleaned_data
            log.debug("\n".join(["%s=%s" % (k,v) for k,v in data.items()]))
            #  Create the account
            user = User(username=data['username'],
email=data['username'], password=data['password'])
            user.save()
            return render_to_response('registration/login.html', {},
context_instance=RequestContext(request) )

    #  Either initial GET or Validation errors - return to account page
    return render_to_response('registration/createaccount.html',
{'form': form }, context_instance=RequestContext(request) )

When I try to create a user that already exists (username exists in
the DB), I get this error

IntegrityError at /accounts/createaccount/
(1062, "Duplicate entry '[EMAIL PROTECTED]' for key 2")

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to