Выполнение логики логических операций в представлениях и шаблоне
У меня две задачи. Во-первых, у меня есть модель с полем 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)