Django - how to go back to previous view with parameters

Viewed 73

I am relatively new with Django, this must be a common problem.
I have created a view to show a form to input date (using widget that returns separate fields): when date is inserted, I call a function userPage(request, my_date) that filters, processes and renders a page (user.html) showing a list of items.

def datePage(request):
    user=request.user
    context = {}
    context['form'] = UserDateForm()
    if request.GET:
        date_yr = request.GET['food_date_year']
        date_mo = request.GET['food_date_month']
        date_day = request.GET['food_date_day']
        my_date_string = date_yr+'-'+date_mo+'-'+date_day
        my_date = datetime.strptime(my_date_string, "%Y-%m-%d").date()
        return userPage(request,my_date)
    return render(request, "date.html", context)

def userPage(request, my_date):
    user=request.user
    # process context using user, my_date

    context={...:..., 'my_date': my_date}
    return render(request,'user.html',context)

In user.html I include a URL to add an item:

    </div>
    <form action="{% url 'My_ItemCreate' %}" method="POST">
        {%csrf_token%}
        <button type="submit" class="btn btn-success">
            <span class="glyphicon glyphicon-plus"></span>
        </button>
    </form> 
</div>

'My_ItemCreate' points to a django.views.generic CreateView that creates an item.:

    path('MyItemCreate/',views.My_ItemCreate.as_view(),name='My_ItemCreate'),

class My_ItemCreate(CreateView):
    model = MyItem
    fields = ...
  1. After creating the item in the CreateView, how do I go back to the user page after I inserted the date? I have lost the date in the new URL. If I use URL resolver to go to userPage, how do I pass a date in the format?

  2. It would be nice that I am able to pass initial values in the CreateView, and make some fields read-only, how do I modify/override CreateView ?

Many Thanks for your help!

1 Answers

I have found an answer to my problem: using request.session to store a value and retrieving in other views, it works fine.

I am still curious to know if there are experts who would provide a more elegant solution, and if someone could be so kind to answer point 2) regarding CreateView read_only fields Thanks D

Related