Can you check the POST data and see if 'username' is there? You can do it easily with Firefox's Firebug extension.
- Paulo On Thu, Aug 5, 2010 at 6:24 AM, strayhand <tobyb...@gmail.com> wrote: > So I'm rolling out my own registration form that should update the > following models: > > - User (auth module) > - UserProfile > > Everything seems to be coming together but I'm having a hard time with > the save() method for the form. My UserProfile model has a couple of > fields that refer to other models and I'm having difficulty setting > them up properly. I keep getting an error telling me: > > Exception Type: IntegrityError at /registration/ > Exception Value: auth_user.username may not be NULL > > I know where the problems are: > > new_user = > User.objects.create_user(username=self.cleaned_data['username'], > email=self.cleaned_data['email'], > password=self.cleaned_data['password1']) > > and I'm getting this similar error for defining the user profile on > the line below. > > new_profile.user = > User.objects.get(username__exact=self.cleaned_data['username']) > > I'm just not sure how else to write this stuff. I'm including my form, > model and the exact error message that I'm getting below. Any insight > that you have is greatly appreciated. Thank you. > > # registration.forms.py > > import re > from django import forms > from django.db import models > from django.contrib.localflavor.us.forms import USPhoneNumberField > from django.contrib.auth.models import User > from ylbbq.areas.models import Area > from ylbbq.profiles.models import UserProfile > > STATES = ( > ('WA', 'Washington'), > ('AK', 'Alaska'), > ('AL', 'Alabama'), > ('AR', 'Arkansas'), > ('AZ', 'Arizona'), > ('CA', 'California'), > ('CO', 'Colorado'), > ('CT', 'Connecticut'), > ('DE', 'Delaware'), > ('FL', 'Florida'), > ('GA', 'Georgia'), > ('HI', 'Hawaii'), > ('IA', 'Iowa'), > ('ID', 'Idaho'), > ('IL', 'Illinois'), > ('IN', 'Indiana'), > ('KS', 'Kansas'), > ('KY', 'Kentucky'), > ('LA', 'Louisiana'), > ('MA', 'Massachusetts'), > ('MD', 'Maryland'), > ('ME', 'Maine'), > ('MI', 'Michigan'), > ('MN', 'Minnesota'), > ('MO', 'Missouri'), > ('MS', 'Mississippi'), > ('MT', 'Montana'), > ('NC', 'North Carolina'), > ('ND', 'North Dakota'), > ('NE', 'Nebraska'), > ('NH', 'New Hampshire'), > ('NJ', 'New Jersey'), > ('NM', 'New Mexico'), > ('NV', 'Nevada'), > ('NY', 'New York'), > ('OH', 'Ohio'), > ('OK', 'Oklahoma'), > ('OR', 'Oregon'), > ('PA', 'Pennsylvania'), > ('RI', 'Rhode Island'), > ('SC', 'South Carolina'), > ('SD', 'South Dakota'), > ('TN', 'Tennessee'), > ('TX', 'Texas'), > ('UT', 'Utah'), > ('VT', 'Vermont'), > ('VA', 'Virginia'), > ('WI', 'Wisconsin'), > ('WV', 'West Virginia'), > ('WY', 'Wyoming'), > ('AB', 'Alberta'), > ('BC', 'British Columbia'), > ('MB', 'Manitoba'), > ('NB', 'New Brunswick'), > ('NL', 'Newfoundland and Labrador'), > ('NS', 'Nova Scotia'), > ('NT', 'Northwest Territories'), > ('NU', 'Nunavut'), > ('ON', 'Ontario'), > ('PE', 'Prince Edward Island'), > ('QC', 'Quebec'), > ('SK', 'Saskatchewan'), > ('YT', 'Yukon'), > ) > > COUNTRIES = ( > ('USA', 'United States'), > ('Canada', 'Canada') > ) > > POSTAL_CODE_PATTERN = re.compile(r'^\d{5}-\d{4}|\d{5}|[A-Z]\d[A-Z] > \d[A-Z]\d$') > > class RegisterForm(forms.Form): > username = forms.CharField(max_length=30, help_text='Create a user > name for this Web site.') > first_name = forms.CharField(max_length=30) > last_name = forms.CharField(max_length=30) > password1 = forms.CharField(max_length=60, label='Password', > widget=forms.PasswordInput) > password2 = forms.CharField(max_length=60, label='Password > Confirmation', widget=forms.PasswordInput) > email = forms.EmailField(help_text='Enter a valid e-mail address.') > phone = USPhoneNumberField(max_length=12, help_text='Enter your > phone > number in the following format: 253-123-5678.') > address = forms.CharField(max_length=70, help_text='Enter mailing > address.') > city = forms.CharField(max_length=50) > state_province = forms.ChoiceField(choices=STATES, label='State or > Province') > country = forms.ChoiceField(choices=COUNTRIES) > zip_code = forms.CharField(max_length=10, label='Mailing Code', > help_text='Enter your zip code (US or Canadian).') > birth_date = forms.DateField(help_text='Enter your birthdate in the > following format: 1979-09-29 (YYYY-MM-DD).') > areas = forms.ModelMultipleChoiceField(queryset=Area.objects.all(), > label='Preferred Areas', help_text='Select the areas that you\'d like > to serve.') > > def clean_username(self): > data = self.cleaned_data['username'] > try: > User.objects.get(username=data) > except User.DoesNotExist: > return > raise forms.ValidationError('The username "%s" is already > taken.' % > data) > > def clean_zip_code(self): > data = self.cleaned_data['zip_code'] > match_code = POSTAL_CODE_PATTERN.match(data) > if match_code is None: > raise forms.ValidationError('Enter a valid US or > Canadian zip > code.') > return > > def clean(self): > data = self.cleaned_data > > # Compare the two passwords for a match > pw1 = data.get('password1') > pw2 = data.get('password2') > > if pw1 != pw2: > msg = "Passwords do not match" > self._errors['password2'] = self.error_class([msg]) > > return data > > def save(self): > > # User > new_user = > User.objects.create_user(username=self.cleaned_data['username'], > email=self.cleaned_data['email'], > password=self.cleaned_data['password1']) > new_user.first_name = self.cleaned_data['first_name'] > new_user.last_name = self.cleaned_data['last_name'] > new_user.is_active = True > new_user.save() > > # Profile > new_profile = UserProfile.objects.create() > new_profile.user = > User.objects.get(username__exact=self.cleaned_data['username']) > new_profile.phone = self.cleaned_data['phone'] > new_profile.address = self.cleaned_data['address'] > new_profile.city = self.cleaned_data['city'] > new_profile.state_province = > self.cleaned_data['state_province'] > new_profile.country = self.cleaned_data['country'] > new_profile.zip_code = self.cleaned_data['zip_code'] > new_profile.birth_date = self.cleaned_data['birth_date'] > new_profile.areas = self.cleaned_data['areas'] > new_profile.save() > > return > > # profiles.models.py > > from django.db import models > from django.contrib.auth.models import User > from ylbbq.areas.models import Area > > STATES = ( > ('AK', 'Alaska'), > ('AL', 'Alabama'), > ('AR', 'Arkansas'), > ('AZ', 'Arizona'), > ('CA', 'California'), > ('CO', 'Colorado'), > ('CT', 'Connecticut'), > ('DE', 'Delaware'), > ('FL', 'Florida'), > ('GA', 'Georgia'), > ('HI', 'Hawaii'), > ('IA', 'Iowa'), > ('ID', 'Idaho'), > ('IL', 'Illinois'), > ('IN', 'Indiana'), > ('KS', 'Kansas'), > ('KY', 'Kentucky'), > ('LA', 'Louisiana'), > ('MA', 'Massachusetts'), > ('MD', 'Maryland'), > ('ME', 'Maine'), > ('MI', 'Michigan'), > ('MN', 'Minnesota'), > ('MO', 'Missouri'), > ('MS', 'Mississippi'), > ('MT', 'Montana'), > ('NC', 'North Carolina'), > ('ND', 'North Dakota'), > ('NE', 'Nebraska'), > ('NH', 'New Hampshire'), > ('NJ', 'New Jersey'), > ('NM', 'New Mexico'), > ('NV', 'Nevada'), > ('NY', 'New York'), > ('OH', 'Ohio'), > ('OK', 'Oklahoma'), > ('OR', 'Oregon'), > ('PA', 'Pennsylvania'), > ('RI', 'Rhode Island'), > ('SC', 'South Carolina'), > ('SD', 'South Dakota'), > ('TN', 'Tennessee'), > ('TX', 'Texas'), > ('UT', 'Utah'), > ('VT', 'Vermont'), > ('VA', 'Virginia'), > ('WA', 'Washington'), > ('WI', 'Wisconsin'), > ('WV', 'West Virginia'), > ('WY', 'Wyoming'), > ('AB', 'Alberta'), > ('BC', 'British Columbia'), > ('MB', 'Manitoba'), > ('NB', 'New Brunswick'), > ('NL', 'Newfoundland and Labrador'), > ('NS', 'Nova Scotia'), > ('NT', 'Northwest Territories'), > ('NU', 'Nunavut'), > ('ON', 'Ontario'), > ('PE', 'Prince Edward Island'), > ('QC', 'Quebec'), > ('SK', 'Saskatchewan'), > ('YT', 'Yukon'), > ) > > COUNTRIES = ( > ('USA', 'United States'), > ('Canada', 'Canada') > ) > > # Create your models here. > class UserProfile(models.Model): > user = models.ForeignKey(User, unique=True) > phone = models.CharField(max_length=12) > address = models.CharField(max_length=70) > city = models.CharField(max_length=50) > state_province = models.CharField(max_length=2, choices=STATES, > verbose_name='State or Province') > country = models.CharField(max_length=20, choices=COUNTRIES) > zip_code = models.CharField(max_length=7) > birth_date = models.DateField() > areas = models.ManyToManyField(Area) > > def __unicode__(self): > return self.user.username > > ERROR MESSAGE: > > Environment: > > Request Method: POST > Request URL: http://localhost:8000/registration/ > Django Version: 1.2.1 > Python Version: 2.6.1 > Installed Applications: > ['django.contrib.auth', > 'django.contrib.contenttypes', > 'django.contrib.sessions', > 'django.contrib.sites', > 'django.contrib.messages', > 'django.contrib.admin', > 'django.contrib.admindocs', > 'ylbbq.areas', > 'ylbbq.profiles', > 'ylbbq.shifts'] > Installed Middleware: > ('django.middleware.common.CommonMiddleware', > 'django.contrib.sessions.middleware.SessionMiddleware', > 'django.middleware.csrf.CsrfViewMiddleware', > 'django.contrib.auth.middleware.AuthenticationMiddleware', > 'django.contrib.messages.middleware.MessageMiddleware') > > > Traceback: > File "/Library/Python/2.6/site-packages/django/core/handlers/base.py" > in get_response > 100. response = callback(request, > *callback_args, **callback_kwargs) > File "/Users/bealtr/Personal/YLBBQ/Django Projects/ylbbq/../ylbbq/ > register/views.py" in register > 10. user = form.save() > File "/Users/bealtr/Personal/YLBBQ/Django Projects/ylbbq/../ylbbq/ > register/forms.py" in save > 129. new_user = > User.objects.create_user(username=self.cleaned_data['username'], > email=self.cleaned_data['email'], > password=self.cleaned_data['password1']) > File "/Library/Python/2.6/site-packages/django/contrib/auth/models.py" > in create_user > 129. user.save(using=self._db) > File "/Library/Python/2.6/site-packages/django/db/models/base.py" in > save > 435. self.save_base(using=using, force_insert=force_insert, > force_update=force_update) > File "/Library/Python/2.6/site-packages/django/db/models/base.py" in > save_base > 528. result = manager._insert(values, > return_id=update_pk, using=using) > File "/Library/Python/2.6/site-packages/django/db/models/manager.py" > in _insert > 195. return insert_query(self.model, values, **kwargs) > File "/Library/Python/2.6/site-packages/django/db/models/query.py" in > insert_query > 1479. return > query.get_compiler(using=using).execute_sql(return_id) > File "/Library/Python/2.6/site-packages/django/db/models/sql/ > compiler.py" in execute_sql > 783. cursor = super(SQLInsertCompiler, > self).execute_sql(None) > File "/Library/Python/2.6/site-packages/django/db/models/sql/ > compiler.py" in execute_sql > 727. cursor.execute(sql, params) > File "/Library/Python/2.6/site-packages/django/db/backends/util.py" in > execute > 15. return self.cursor.execute(sql, params) > File "/Library/Python/2.6/site-packages/django/db/backends/sqlite3/ > base.py" in execute > 200. return Database.Cursor.execute(self, query, params) > > Exception Type: IntegrityError at /registration/ > Exception Value: auth_user.username may not be NULL > > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To post to this group, send email to django-us...@googlegroups.com. > To unsubscribe from this group, send email to > django-users+unsubscr...@googlegroups.com<django-users%2bunsubscr...@googlegroups.com> > . > For more options, visit this group at > http://groups.google.com/group/django-users?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-us...@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.