Выполнение логики логических операций в представлениях и шаблоне

У меня две задачи. Во-первых, у меня есть модель с полем submit как булево поле. Я использую форму модели и отображаю ее в шаблоне. Есть две опции как Boolean select, т.е. 'Yes' и 'No' для пользователя, чтобы выбрать, хочет ли он сохранить форму или нет. Я хочу, чтобы если пользователь выберет "Да", форма была сохранена, а если выберет "Нет", форма не должна быть сохранена. Я исчерпал все логические схемы, которые, как я думал, могут сработать, но не могу добиться этого. Ниже приведены представления

views.py

 def submit(request):
    if request.method =='POST':
        form = submitForm(request.POST)
        form.instance.user = request.user
        sub = form.save()
        if sub.sumit ==True:

        if sub:
            messages.info(request, 'You have submitted you form successfully')
            return redirect('home')
         
        messages.info(request, 'Continue editing your data')
        return render(request, 'portal/home/submit.html')
    form =submitForm()
    context = {
        'form':form,
        # 'sub':sub
    }
    return render(request, 'portal/home/submit.html', context)

Мой второй вопрос в этом представлении. поскольку я не смог добиться того, чего хотел в вышеуказанной форме, я просто запросил ее в этом user_info, чтобы, если пользователь сохраняет submit как 'Yes' или 'No', некоторые определенные кнопки в шаблоне должны или не должны отображаться. Я хочу, чтобы только пользователь, который выбрал вышеуказанную булеву форму как True или 'Yes', как показано на шаблоне, не видел кнопки 'Сохранить' и 'Обновить', но любой, кто еще не отправил или отправил 'No', может видеть все кнопки.

просмотров

def user_info(request):

    # user = request.user
    user =request.user
    try:
        personal = Personalinfo.objects.get(user_id=user)
    except Personalinfo.DoesNotExist:
        messages.error(request, 'Please fill in all data')
        personal =None
    # try:
    sub = SubmitData.objects.filter(user_id = user)
    
    


    # except SubmitData.DoesNotExist:
        # messages.error(request, f'You already submitted you data on, {sub.date_submited}')
        # sub =None

    if request.method == "POST":
        form = usersForm(request.POST, request.FILES, instance =personal)
        if form.is_valid():
            form.instance.user = request.user
            form.save()          
            messages.success(request, 'User data saved successful! Click next to proceed')
            return redirect('user_info')
        
        else:
            messages.error(request, 'Error! Check your data')
            return redirect('user_info')
      
    form = usersForm(instance =personal)
    context={
        "form": form,
        'sub':sub,
        # 'submitted':submitted
        }
    return render(request, 'portal/home/user_info.html', context)

это шаблон

                      {% if sub %}
                      
                      <div class="col-md-4 col-sm-3">
                        <div class="text-center">
                          
                            <a class="btn btn-dark text-decoration-none text-white bg-dark mt-4 mb-0" href="{% url 'academy' %}">Next</a>      
                          
                        </div>
                      </div>
                    </div>
                      {% else %}

                      <div class="row">
                        <div class="col-md-10 col-sm-10 mx-auto ">
                          <button type="submit" name="register" class="text-white btn bg-dark mt-4 mb-0">
                            Save
                          </button>
                          <a class="btn btn-dark text-decoration-none text-white btn bg-dark mt-4 mb-0" href="{% url 'user_update' request.user.pk %}"> Update </a>      
                          
                          <a class="btn btn-dark text-decoration-none text-white bg-dark mt-4 mb-0" href="{% url 'academy' %}">Next</a>    
                        </div>
                        
                      </div>


                    {% endif %}
                    

Ваши ответы намного улучшат меня. Спасибо

Первый вопрос:

Я предполагаю, что поле называется sumit согласно вашему вопросу (извините, если это опечатка :-) )

Где у вас

    form.instance.user = request.user
    sub = form.save()
    if sub.sumit ==True:

    if sub:
        messages.info(request, 'You have submitted you form successfully')
        return redirect('home')
     

заменить на

    #set up sub as a 'falsey' value
    sub = ""
    #create an instance of form
    form = submitForm(request.POST)
    #check that the data is valid
    if form.is_valid():
        #check if the 'submit' checkbox has been checked
        #this is assuming you are using a default boolean checkbox widget, 
        #which only gets submitted if checked
        #with other widgets you might need to check for a particular value
        #eg, if form.cleaned_data.get("sumit") == "Yes"
        if form.cleaned_data.get("sumit"):
            form.instance.user = request.user
            sub = form.save()
        if sub:
            messages.info(request, 'You have submitted you form successfully')
            return redirect('home')
     

Что касается второго вопроса - если я правильно понял, вы должны быть в состоянии сделать это с дополнительным фильтром на sub, чтобы запрос был успешным, только если пользователь указал yes :

sub = SubmitData.objects.filter(user_id = user, sumit=True)
Вернуться на верх