alias51
alias51

Reputation: 8608

How to update a variable within a View.py

Consider this simple user profile:

from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    onboarding_step = models.SmallIntegerField(default='1')

What is the simplest method it increment the onboarding_step within UserProfile each time a separate form from a different model is submitted? For example:

Here's the ModelForm (from a separate model, Site) I am submitting:

class OnBoardingProgressForm(forms.ModelForm):
      class Meta:
            model = Site
            fields = ( 'abc', 'xyz', )

And here is the view.py for the form:

if request.method == "POST":
    form = OnBoardingProgressForm( request.POST )
        if form.is_valid():
            ....
            THIS CODE DOES NOT WORK BUT IS MY BEST GUESS:
            last = request.user.profile
            last.onboarding_step = 2
            ....
            obj = form.save(commit=False)
            obj.user = current_user
            obj.save()

            return render(request, "nextpage.html", {'form': form })

How can I increment the user.onboarding_step by 1?

Upvotes: 0

Views: 291

Answers (2)

jatinkumar patel
jatinkumar patel

Reputation: 2990

if request.method == "POST":
    form = OnBoardingProgress( request.POST )
        if form.is_valid():
            ....
            // Can I increment the code here? //
            ....
            obj = form.save(commit=False)                
            obj.user = current_user
            obj.save()

            user_obj = UserProfile.objects.get(user=request.user)
            user_obj.onboarding_step = user_obj.onboarding_step + 1
            user_obj.save()

            return render(request, "nextpage.html", {'form': form })

or you can make autoincrement field also.

Upvotes: 1

Rahul Gupta
Rahul Gupta

Reputation: 47846

Get the UserProfile object for the current user and then increment the value of the attribute of onboarding_step.

Try this:

if request.method == "POST":
    form = OnBoardingProgress(request.POST)
    current_user = request.user
    if form.is_valid():  
        user_profile = UserProfile.objects.filter(user=current_user)[0] # get the user profile object for the current user
        user_profile.onboarding_step += 1 # increment the value  
        user_profile.save() # save the object                 
        obj = form.save(commit=False)
        obj.user = current_user
        obj.save()

        return render(request, "nextpage.html", {'form': form })

Upvotes: 0

Related Questions