【问题标题】:Notification when a certain point in time is exceeded (Python)超过某个时间点时的通知(Python)
【发布时间】:2021-05-28 19:53:54
【问题描述】:

我想创建一个待办事项列表,我可以在其中安排每个任务的日期和时间。我的目标是在提供的datetime 等于当前时间时获得某种响应。例如,我在周六晚上的周一下午 6 点安排洗衣服。两天后(周一下午 6 点)我想收到通知,我应该洗衣服

请注意,关键思想可以在 views.py 的第一行中的 index() 函数 中找到,包括 if 语句。

这是我的代码: urls.py

from django.urls import path

from . import views

urlpatterns = [
    path("", views.index, name="index"),
    path("<int:aufgabenzettel_id>", views.details, name="details"),
    path("add/", views.add, name="add"),
    path("delete/<int:aufgabenzettel_id>", views.delete, name="delete"),
    path("edit/<int:aufgabenzettel_id>", views.edit, name="edit"),
    path("update/<int:aufgabenzettel_id>", views.update, name="update")
]

models.py

from django.db import models

# Create your models here.
class Aufgabenzettel(models.Model):
    Aufgabeselbst = models.CharField(max_length=64)
    Datum = models.DateTimeField(auto_now_add=True)
    Geplant = models.DateTimeField(auto_now_add=False, auto_now=False)

    def __str__(self):
        return f"{self.Aufgabeselbst}"

views.py(重要部分可以在第一行的索引函数中找到,包括 if 语句)

from django.db.models.fields import DateTimeField
from django.http.response import HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
from django.utils import timezone
from datetime import datetime

from .models import Aufgabenzettel

# Create your views here.

def index(request):
    now = datetime.now()
    Aufgaben_items = Aufgabenzettel.objects.all().order_by("-Geplant") #arrange objects in the correct order
    for Aufgabenzettel.Geplant in Aufgaben_items: #run through the loop and...
        if Aufgabenzettel.Geplant == now: #...search for items in the database where the scheduled time ("Geplant") is equal to the current time
            return render (request, "aufgabenzettel/add.html") #response in any way e.g. by returning the add.html 
    return render(request, "aufgabenzettel/index.html", {
        "Aufgabenliste":Aufgabenzettel.objects.all(), #currently not used
        "Aufgaben_items":Aufgaben_items
    })

def details(request, aufgabenzettel_id):
    aufgabenzettel = Aufgabenzettel.objects.get(pk=aufgabenzettel_id)
    creationDate = aufgabenzettel.Datum
    dueDate = aufgabenzettel.Geplant
    return render(request, "aufgabenzettel/details.html", {
        "details":aufgabenzettel,
        "creationDate": creationDate,
        "dueDate":dueDate
    })

def add(request):
    addDatum = timezone.now()
    if request.method == "POST":
        Aufgabe = request.POST["Hinzufügen"]
        geplantes_datum = request.POST["DatumFeld"]
        Aufgabenzettel.objects.create(Aufgabeselbst=Aufgabe , Datum=addDatum, Geplant=geplantes_datum) #Aufgabenname und Aufgabendatum erstellen
        return HttpResponseRedirect(reverse("index"))
    return render(request, "aufgabenzettel/add.html")

def delete(request, aufgabenzettel_id):
    aufgabenzettel = Aufgabenzettel.objects.get(pk=aufgabenzettel_id)
    aufgabenzettel.delete()
    return HttpResponseRedirect(reverse("index"))

def edit(request, aufgabenzettel_id):
    aufgabenzettel = Aufgabenzettel.objects.get(pk=aufgabenzettel_id)
    return render(request, "aufgabenzettel/edit.html", {
        "details":aufgabenzettel
    })

def update(request, aufgabenzettel_id):
    if request.method == "POST":
        Aufgabe = Aufgabenzettel.objects.get(pk=aufgabenzettel_id)
        Aufgabe.Aufgabeselbst = request.POST["Bearbeiten"]
        Aufgabe.save()
        return HttpResponseRedirect(reverse("index"))
    return render(request, "aufgabenzettel/edit.html")

index.html

{% extends "aufgabenzettel/layout.html" %}

{% block body %}
<h1 id="MeineAufgaben">Meine Aufgaben</h1>
    <table>
        {% for Aufgabeselbst in Aufgaben_items %}
            <tr>
                <td>
                    <a href="{% url 'details' Aufgabeselbst.id %}"> 
                        {{ Aufgabeselbst }}
                    </a>
                </td>
                <td>
                    <form action="{% url 'delete' Aufgabeselbst.id %}" method="post">
                        {% csrf_token %}
                    <button type="submit"  id="löschenbtn">Löschen</button>
                </form>
                </td>
                <td>
                    <form action="{% url 'edit' Aufgabeselbst.id %}" method="post">
                        {% csrf_token %}
                    <button type="submit" value="{{ details }}" class="bearbeitenbtn">Bearbeiten</button>
                    </form>
                </td>
            </tr>
        {% endfor %}
    </table>
    <h2>
        <a href="{% url 'add' %}" id="neuebtn">Neue Aufgabe erstellen</a>
    </h2>
{% endblock %}

add.html

{% extends "aufgabenzettel/layout.html" %}

{% block body %}
    <h1>Füge eine neue Aufgabe hinzu!</h1>
    <form action="{% url 'add' %}" method="post">
        {% csrf_token %}
        <input type="text" name="Hinzufügen" placeholder="Neue Aufgabe">
        <input type="datetime-local" name="DatumFeld">
        <button type="submit" id="Hinzufügen">Hinzufügen</button>
    </form>
{% endblock %}

details.html

{% extends "aufgabenzettel/layout.html" %}

{% block body %}
    <h1>{{ details }}</h1>
    <h3>Erstellt: {{ creationDate }}</h3>
    <h2>Geplant: {{ dueDate }}</h2>
    <a href="{% url 'index' %}">Zurück zu Aufgabe</a>
{% endblock %}

edit.html

{% extends "aufgabenzettel/layout.html" %}

{% block body %}
    <h2>Bearbeite deine Aufgabe "{{ details }}"</h2>
    <form action="{% url 'update' details.id %}" method="post">
    {% csrf_token %}
        <input type="text" name="Bearbeiten" value="{{details}}">
        <button type="submit" class="bearbeitenbtn">Bearbeiten</button>
    </form>
    <a href="{% url 'index' %}">Zurück zu Aufgabe</a>
{% endblock %}

layout.html

{% load static %}
<!DOCTYPE html>
<html lang="de">
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Aufgabenzettel</title>
        <link rel="stylesheet" href="{% static '/css/main.css' %}">
    </head>
    <body>
        {% block body %}
        {% endblock %}
    </body>

</html>

我没有收到错误或其他任何信息,但代码未按预期运行。我只希望索引函数循环遍历 models.py 中的数据库 Aufgabenzettel 中的每个元素,并且如果它检测到预定时间与某种当前时间对应的元素行动(在这种情况下,重定向到 add.html 被执行)应该发生。但是我没有得到任何这样的回应......

像往常一样,我感谢各种解决方案或帮助!

【问题讨论】:

    标签: python django datetime django-models


    【解决方案1】:

    您以错误的方式比较日期时间,这就是您的 if 条件失败的原因 (Aufgabenzettel.Geplant == now) 。 尝试像这样比较它们:

    In [1]: from datetime import datetime
    In [2]: past = datetime.now()
    In [3]: present = datetime.now()
    In [4]: present.strftime('%Y-%m-%d %H:%M:%S') == past.strftime('%Y-%m-%d 
    %H:%M:%S')
    Out[17]: False
    In [5]: present.strftime('%Y-%m-%d %H:%M') == past.strftime('%Y-%m-%d %H:%M')
    Out[2]: True
    

    通常在将日期时间转换为 iso 格式后进行比较。您还可以使用时区中的函数 .isoformat()。

    从这里获取:How to compare two Datetime field in Django

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      相关资源
      最近更新 更多