Search code examples
pythondjangoformsdjango-login

How to save a data after user logs in DJANGO


After user logs in, user is able to submit a form. On click of submit button, data is being stored in DB, but how should I connect this information to the submitting user.

I would need the code as well as the structure of the new db

Kind of starting out in django. Any help would be appreciated!!!

I have included user as foreign key in the CustomizeRequest model, but now how do i fill in this information?

Exact Scenario: After user log in, once he comes to contactUs.html, he submits a form which tells the number of travellers. This number is being stored in the DB. But now how do I connect each of these numbers to the submitted user?

models.py

class CustomizeRequest(models.Model):
    user = models.ForeignKey(User)
    travellers = models.CharField(max_length=2)

    def __str__(self):
        return self.travellers

contactUs.html

<form method="POST" class="form-horizontal">
{% csrf_token %}
<div class="btn-group" data-toggle="buttons">
{% for radio in crform.travellers %}
    <label class="btn btn-default {% if radio.choice_label = '1'   %}active{% endif %}" for="{{ radio.id_for_label }}">
      {{ radio.choice_label }}
      {{ radio.tag }}
    </label>
{% endfor %}
</div>
<button type="submit" class="btn btn-default btn-block btn-warning">SUBMIT</button>
</form>

views.py

def contactUs(request):
    if request.method=="POST":
        form = CustomizeRequestForm(request.POST)
        form.save()
    else:
        form = CustomizeRequestForm()
    context_dict = {'form': form}
    return render(request, 'tour/contactUs.html', context_dict)

Solution

  • Based on catavaran answer (with a check to see if the form is valid):

    from django.contrib.auth.decorators import login_required
    from django.shortcuts import redirect, render
    
    @login_required
    def contactUs(request):    
        form = CustomizeRequestForm(data=request.POST or None)
    
        if request.method == "POST":
            if form.is_valid():
                 customize_request = form.save(commit=False)
                 customize_request.user = request.user
                 customize_request.save()
                 return redirect('.')
            else:
                 pass # could add a notification here
    
        context_dict = {'form': form}
        return render(request, 'tour/contactUs.html', context_dict)