Hello,
ModelMultipleChoiceField fields cleaned data are lists, so you are trying to
create an object with a list of ids as id. Also I think you want to retrive
the object, in that case you have to use the get function of the model
manager (e.g. Object.objects.get(id=someid). )
If you need to get all the options of a multiple choice field, you must use
a ManyToMany relationship instead of a ForeingKey.
Regards,
Matias.
On Fri, Oct 24, 2008 at 4:23 PM, Lar <[EMAIL PROTECTED]> wrote:
>
> Hi,
>
> I've been beating my head against this for a couple of days. I am
> creating a User with additional information stored in a profile
> model. I create the user, then create the profile object. I get the
> form information and if it is valid, I just want to save the
> information and do a bit more processing.
>
> Two questions:
> 1. Why is the profile information not saving?
> 2. If I want to access the activation_string for a specific user and
> change it's value, how do I do that? I'm sure the way I'm trying to
> do it is incorrect.
>
> Any assistance would be appreciated.
>
> Thanks,
> Laura
>
> **********I have this Model:
>
> class StudentProfile(models.Model):
> address = models.CharField(max_length=50)
> city = models.CharField(max_length=60)
> province = models.CharField(max_length=30)
> postalcode = models.CharField(max_length=50)
> telephone = models.CharField(max_length=12)
> memberoffice = models.ForeignKey('memberoffices.MemberOffice')
> creationdate = models.DateTimeField(auto_now_add=True)
> activated = models.BooleanField(default=False)
> activation_string = models.CharField(max_length=30, unique=True)
> activationdate = models.DateTimeField(null=True)
> user = models.ForeignKey(User,unique=True)
>
> **********I have set it up in settings.py this way:
> AUTH_PROFILE_MODULE = 'students.StudentProfile'
>
>
> ********** I have this form:
> class StudentForm(forms.Form):
> username = forms.CharField(max_length=30)
> first_name = forms.CharField(max_length=30)
> last_name = forms.CharField(max_length=30)
> email = forms.EmailField()
> password1 =
>
> forms.CharField(max_length=30,widget=forms.PasswordInput(render_value=False))
> password2 =
>
> forms.CharField(max_length=30,widget=forms.PasswordInput(render_value=False))
> address = forms.CharField(max_length=50)
> city = forms.CharField(max_length=60)
> province = forms.CharField(max_length=30)
> postalcode = forms.CharField(max_length=50)
> telephone = forms.CharField(max_length=12)
> memberoffice =
> forms.ModelMultipleChoiceField(queryset=MemberOffice.objects.all())
>
> **********and this save routine associated with the form to save it:
> def save(self):
>
> newstudent =
> User.objects.create_user(username=self.cleaned_data['username'],
>
> email=self.cleaned_data['email'],
>
> password=self.cleaned_data['password1'])
> newstudent.is_staff = False
> newstudent.first_name = self.cleaned_data['first_name']
> newstudent.last_name = self.cleaned_data['last_name']
> newstudent.save()
> try:
> newStudentProfile = request.newstudent.get_profile()
> except:
> newStudentProfile = StudentProfile(user=newstudent)
> newStudentProfile.address =
> self.cleaned_data['address']
> newStudentProfile.city = self.cleaned_data['city']
> newStudentProfile.province =
> self.cleaned_data['province']
> newStudentProfile.postalcode =
> self.cleaned_data['postalcode']
> newStudentProfile.memberoffice =
> MemberOffice(id=self.cleaned_data['memberoffice'])
> newStudentProfile.save()
> return newstudent
>
> **********This is the controlling view.py file:
>
> def registerstudent(request,language):
> if request.POST:
> form = StudentForm(data=request.POST)
> if form.is_valid():
> newstudent = form.save()
> newstudent.get_profile().activation_string =
> generate_activation_string()
> email_content =
> create_activation_email_content(newprofile.activation_string)
>
> send_activation_email(newstudent.first_name,newstudent.email,email_content)
> return HttpResponse('You\'ll receive an email. Click the
> link in the email.')
> else:
> errors = form.errors
> return HttpResponse(errors)
> else:
> form = StudentForm()
> return render_to_response('englishpublic/register.html',
> {'form':form,})
>
>
> **********This is the error/traceback:
> Environment:
>
> Request Method: POST
> Request URL: http://127.0.0.1:8000/english/register/
> Django Version: 1.0-final-SVN-unknown
> Python Version: 2.5.1
> Installed Applications:
> ['django.contrib.auth',
> 'django.contrib.contenttypes',
> 'django.contrib.sessions',
> 'django.contrib.sites',
> 'django.contrib.admin',
> 'django.contrib.flatpages',
> 'django.contrib.admindocs',
> 'endeavor.students',
> 'endeavor.memberoffices',
> 'endeavor.membermanagers',
> 'endeavor.courses',
> 'endeavor.courseproviders']
> Installed Middleware:
> ('django.middleware.common.CommonMiddleware',
> 'django.contrib.sessions.middleware.SessionMiddleware',
> 'django.contrib.auth.middleware.AuthenticationMiddleware')
>
>
> Traceback:
> File "/Library/Python/2.5/site-packages/django/core/handlers/base.py"
> in get_response
> 86. response = callback(request, *callback_args,
> **callback_kwargs)
> File "/Users/laurarey/LAR Studios/endeavor/../endeavor/students/
> views.py" in registerstudent
> 29. newstudent = form.save()
> File "/Users/laurarey/LAR Studios/endeavor/../endeavor/students/
> forms.py" in save
> 55. newStudentProfile.save()
> File "/Library/Python/2.5/site-packages/django/db/models/base.py" in
> save
> 307. self.save_base(force_insert=force_insert,
> force_update=force_update)
> File "/Library/Python/2.5/site-packages/django/db/models/base.py" in
> save_base
> 367. values = [(f, f.get_db_prep_save(raw and
> getattr(self, f.attname) or f.pre_save(self, True))) for f in
> meta.local_fields if not isinstance(f, AutoField)]
> File "/Library/Python/2.5/site-packages/django/db/models/fields/
> related.py" in get_db_prep_save
> 665. return
> self.rel.get_related_field().get_db_prep_save(value)
> File "/Library/Python/2.5/site-packages/django/db/models/fields/
> __init__.py" in get_db_prep_save
> 192. return self.get_db_prep_value(value)
> File "/Library/Python/2.5/site-packages/django/db/models/fields/
> __init__.py" in get_db_prep_value
> 353. return int(value)
>
> Exception Type: TypeError at /english/register/
> Exception Value: int() argument must be a string or a number, not
> 'list'
>
> >
>
--
:wq
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---