Django как изменить базу данных с помощью кнопки на новом окне и закрыть, обновить главную страницу?
Я создал страницу "Список оповещений". (alert_list.html)
и когда я нажимаю на кнопку, он отображает детальную страницу использует пк в новом окне. (alert_detail.html)
Но у меня есть некоторые проблемы с этим.
То, что я хочу сделать...
- change Event.event_status value to 0.
- close new window(detail page)
- refresh main page(alert list page)
<alert_list.html>
{% for event_alert in event_list %}
{% if event_alert.event_status == 1 %}
<div class="col-1 red">
<div class="p-3 rounded-2" id="dash_board_patient_alert">
<a href="{% url 'Alert Detail' event_alert.event_id %}">{{event_alert.member_id}} {{event_alert.event_type}}</a>
</div>
</div>
{% endif %}
{% endfor %}
{{event_alert_activate_count}}
{{pink_block}}
{% for _ in pink_block %}
<div class="col-1 pink">
<div class="p-3 rounded-2" id="dash_board_patient_alert">
<a href="#"></a>
</div>
</div>
{% endfor %}
<alert_detail.html>
{% for event_alert in event_list %}
<form method="POST" class="post-form" action ="{% url 'Alert Update' event_alert.pk %}">
{% csrf_token %}
{{ form }}
<button
type="submit"
class="btn btn-primary"
id="patient_alert_result_confirm">
Confirm
</button>
</form>
{% endfor %}
<alert_update.html>
I don't have any idea.. help me this page
<views.py>
def alert_list(request):
Event.objects.order_by('-event_time')[:12]
event_alert_activate_count = Event.objects.filter(event_status__startswith='1')[:12].count()
pink_block = int(12)
event_list = Event.objects.order_by('-event_time')
context = {
'event_alert_activate_count': event_alert_activate_count,
'event_list' : event_list,
'pink_block' : pink_block
}
return render(request, 'dashboard/alert_list.html', context)
def alertDetail(request,pk):
event = get_object_or_404(Event, pk=pk)
event_list = Event.objects.order_by('-event_time')[:1]
context = {'event_list': event_list,
'event' : event,}
return render(request, 'dashboard/alert_detail.html', context)
def alertUpdate(request,pk):
event = get_object_or_404(Event,pk=pk)
event_list = Event.objects.order_by('-event_time')[:1]
if request.POST :
event_status_form = EventStatusForm(request.POST)
if event_status_form.is_valid():
change_event_status = 0
event.event_status = change_event_status
event_status_form.save()
return HttpResponse('<script type="text/javascript">window.parent.location.href = "/";')
else :
form = EventStatusForm(request.POST)
context = {'event_list': event_list,
'event' : event,
'form' : form,}
return HttpResponse('<script type="text/javascript">window.parent.location.href = "/";')
<model.py>
class Event(models.Model):
member_id = models.ForeignKey(Member, on_delete=models.CASCADE, db_column = 'member_id')
event_type = models.IntegerField(default=0)
room_name = models.CharField(max_length=20)
heart_rate = models.IntegerField(default=0)
breath_rate = models.IntegerField(default=0)
event_status = models.IntegerField(default=0)
event_time = models.DateTimeField(auto_now_add=True, blank=True)
def __str__(self):
return str(self.id)
<forms.py>
class EventStatusForm(forms.Form):
class Meta:
model = Event
fields=('event_status',)
Существуют различные способы справиться с этим.
Используйте форму в представлении деталей со скрытым полем и присвойте кнопке подтверждения в html роль submit. Когда форма будет отправлена, обработайте событие value switch в представлении подробностей и перенаправьте на главную страницу.
.Определите другое представление (например, set_event) и соответствующий url. Кнопка подтверждения перенаправляет на новый url, передавая необходимые параметры. Затем обработайте переключение события в новом представлении и перенаправьте на главную страницу. Вам нужно будет позаботиться о правах доступа в новом представлении (проверить, разрешено ли пользователю совершать действия).
Используйте AJAX для отправки данных и ссылку на кнопку подтверждения на главной странице.