Monday, 15 March 2010

python - How to update a form attribute from view code in django -



python - How to update a form attribute from view code in django -

i have page updating user profile in django project. view code looks this:

@login_required def updateprofile(request, user_id): if request.method == 'post': form = userprofileform(request.post) if form.is_valid(): form.user_id = user_id form.save(commit=true) homecoming index(request) else: profile, created = userprofile.objects.get_or_create(user_id = self.user_id) # don't know if work. profile_form = userprofileform(profile) context = { 'user' : request.user, 'form' : profile_form } homecoming render(request, 'myapp/profile.html', context)

my form looks this:

class userprofileform(forms.modelform): class meta: model = userprofile fields = ['age', 'skill_level']

my user profile looks this:

class userprofile(models.model): user = models.foreignkey(user, unique=true) age = models.integerfield(default=18) skill_level = models.foreignkey(skilllevel)

when gets posted to, receive appears valid user_id along valid form. in userprofileform form not include user_id when renders user cannot decide swap out. instead, user_id gets posted separate parameter (as type out, realize it's kind of weird..). want save userprofile encapsulated userprofileform database on post, give user_id , seek phone call .save(commit=true) on it, returns "column 'user_id' cannot null".

my question simple, how can underlying userprofile object saved form info information @ hand?

standard django form handling idiom in case is

@login_required def updateprofile(request, user_id): if request.method == 'post': form = userprofileform(request.post) if form.is_valid(): obj = form.save(commit=false) # object, don't save yet obj.user = request.user # set user (or user_id) obj.save() # save object homecoming index(request) else: profile, created = userprofile.objects.get_or_create(user_id = self.user_id) # don't know if work. profile_form = userprofileform(profile) context = { 'user' : request.user, 'form' : profile_form } homecoming render(request, 'myapp/profile.html', context)

note form info not in fields, form.my_field = 123 won't work - form info parsed form.cleaned_data dictionary form.save() reads it.

python django

No comments:

Post a Comment