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