[PYTHON] Übergang zum Update-Bildschirm mit dem Django-Tag

Wir werden den Übergang vom zu bearbeitenden Zeitplan zum Aktualisierungsbildschirm und die Rückkehr zum Variantenbildschirm implementieren.

Zunächst werde ich die Tageszeit in der Zeitplantabelle als a-Tag verknüpfen

schedule/month.html


{% extends 'schedule/base.html' %}
{% block header %}
{% endblock header %}

{% block content %}
<table class="table table-striped table-bordered">
<thead>
    <tr align="center" class="info">    <!--Datum-->
        <th rowspan="2"></th>
        {% for item in calender_object %}
                <th class="day_{{ item.date }}">{{ item.date | date:"d" }}</th>
        {% endfor %}
    <tr align="center" class="info">   <!--Tag-->
        {% for item in youbi_object %}
            <th class="day_{{ item.date }}">{{ item }}</th>
        {% endfor %}
    </tr>
</thead>
<tbody>
{% for staff in user_list %}
    <tr align="center">
    <th rowspan="1" class="staff_name" staff_id="{{ staff.staff_id }}" width="200" >{{ staff.last_name }} {{ staff.first_name }}</th>  <!--staff_ID-Element, das in js verwendet wird-->
            {% for item in object_list %} 
                {% if item.user|stringformat:"s" == staff.username|stringformat:"s" %}<!--Wenn der Benutzername der gleiche ist-->
                    <td class="day" id="s{{ staff.id }}d{{ item.date }}"> 
                        {% if item.shift_name_1 != None %}
                            {% if item.shift_name_1|stringformat:"s" == "Ja" or item.shift_name_1|stringformat:"s" == "Geschlossen" %}
                                {{ item.shift_name_1 }}
                            {% else %}
                                {% for shisetsu in shisetsu_object %}
                                    {% if item.shisetsu_name_1|stringformat:"s" == shisetsu.name|stringformat:"s" %}                          
                                        <span style="background-color:{{ shisetsu.color }}">{{ item.shift_name_1 }}</span>
                                    {% endif %}
                                {% endfor %} 
                            {% endif %}    
                        {% endif %}
                {% if item.shift_name_2 != None %}
                    {% if item.shift_name_2|stringformat:"s" == "Ja" or item.shift_name_2|stringformat:"s" == "Geschlossen" %}
                        {{ item.shift_name_2 }}
                    {% else %}
                        {% for shisetsu in shisetsu_object %}
                            {% if item.shisetsu_name_2|stringformat:"s" == shisetsu.name|stringformat:"s" %}                          
                                    <span style="background-color:{{ shisetsu.color }}">{{ item.shift_name_2 }}</span>
                            {% endif %}
                        {% endfor %} 
                    {% endif %}    
                {% endif %}
                {% if item.shift_name_3 != None %}
                    {% if item.shift_name_3|stringformat:"s" == "Ja" or item.shift_name_3|stringformat:"s" == "Geschlossen" %}
                        {{ item.shift_name_3 }}
                    {% else %}
                        {% for shisetsu in shisetsu_object %}
                            {% if item.shisetsu_name_3|stringformat:"s" == shisetsu.name|stringformat:"s" %}                          
                                <span style="background-color:{{ shisetsu.color }}">{{ item.shift_name_3 }}</span>
                            {% endif %}
                        {% endfor %} 
                    {% endif %}    
                {% endif %}
                {% if item.shift_name_4 != None %}
                    {% if item.shift_name_4|stringformat:"s" == "Ja" or item.shift_name_4|stringformat:"s" == "Geschlossen" %}
                        {{ item.shift_name_4 }}
                    {% else %}
                        {% for shisetsu in shisetsu_object %}
                            {% if item.shisetsu_name_4|stringformat:"s" == shisetsu.name|stringformat:"s" %}                          
                                <span style="background-color:{{ shisetsu.color }}">{{ item.shift_name_4 }}</span>
                            {% endif %}
                        {% endfor %} 
                    {% endif %}    
                {% endif %}                   
            {% endif %}            
        {% endfor %}
        </td>

        <tr align="center">
            {% for month in month_total %} 
                {% if month.user ==  staff.id %}<!--Wenn der Benutzername der gleiche ist-->
                    <td><b>{{ month.month_total_worktime }}</b></td>
                {% endif %}
            {% endfor %}
            {% for item in object_list %} 
                {% if item.user|stringformat:"s" == staff.username|stringformat:"s" %}<!--Wenn der Benutzername der gleiche ist-->
                    <td class="day" id="s{{ staff.id }}d{{ item.date }}">
                        <a href="{% url 'schedule:update' item.pk %}">{{ item.day_total_worktime }} </a>
                    </td>
            {% endif %}            
        {% endfor %}
    </tr>
{% endfor %}
</tbody>
</table>
{% endblock content %}



Das HTML ist lang, aber ich habe es geändert, indem ich den Vorgang mit Saigo für wiederholt habe. Durch Anzeigen der Uhrzeit mit dem Primärschlüssel in itm.pk mit Zeitplan: Aktualisierung mit dem Tag a ist es jetzt möglich, zum Bearbeitungsbildschirm für den Zieldatensatz überzugehen.

image.png

Jetzt, da es sich um einen Link handelt, wird er hellblau angezeigt. Als nächstes habe ich auch update.html so geändert, dass ich zurückkehren kann, wenn ich die Zurück-Taste drücke, ohne über den Update-Bildschirm zu aktualisieren.

schedule/update.html


{% extends 'schedule/base.html' %}

{% block header %}
{% endblock header %}

{% block content %}
<form action="" method="POST">{% csrf_token %}
    <P >Mitarbeitername: {{ User_list.last_name }} {{ User_list.first_name }}</P>
    <p>Datum: {{ Schedule_list.date }}</p>
    {{ form.as_p }}
    {% csrf_token %}
    <input class="btn btn-primary" type="submit" value="aktualisieren">
    <a href="{% url 'schedule:monthschedule' Schedule_list.year Schedule_list.month %}" class="btn-secondary btn active">Rückkehr</a>
</form>
{% endblock content %}

Nachdem die Grundlagen der Bearbeitung abgeschlossen sind, möchte ich eine Funktion implementieren, um den nächsten Monat zu erstellen, z. B. wenn es noch wenig Informationen gibt, wenn die Leute sie sehen, oder wenn die Summe aus dem Verschiebungssymbol berechnet wird.

Als ich daran arbeitete, stellte ich fest, dass es beim Umzug von Dezember auf Januar nicht funktionierte. Um damit umzugehen, können Sie den Monat anscheinend einfach berechnen, indem Sie relativedelta installieren. Installieren Sie ihn also.

terminal


pip install python-dateutil

schedule.Viewspy


from django.shortcuts import render, redirect, HttpResponseRedirect
from shisetsu.models import *
from accounts.models import *
from .models import *
import calendar
import datetime
from datetime import timedelta
from datetime import datetime as dt
from django.db.models import Sum
from django.contrib.auth.models import User
from django.views.generic import FormView, UpdateView
from django.urls import reverse_lazy
from .forms import *
from dateutil.relativedelta import relativedelta
# Create your views here.

def homeschedule(request):
    from datetime import datetime
    now = datetime.now()
    return HttpResponseRedirect('/schedule/monthschedule/%s/%s/' % (now.year,now.month,))  #Automatisch zum Schichtbildschirm dieses Monats umleiten

def monthschedulefunc(request,year_num,month_num):
    user_list = User.objects.all()
    year, month = int(year_num), int(month_num)
    shisetsu_object = Shisetsu.objects.all()
    shift_object = Shift.objects.all()
    object_list = Schedule.objects.filter(year = year, month = month).order_by('user', 'date')
    month_total = Schedule.objects.select_related('User').filter(year = year, month = month).values("user").order_by("user").annotate(month_total_worktime = Sum("day_total_worktime"))
    #Ermitteln Sie die Anzahl der Tage im Schichtbereich
    enddate = datetime.date(year,month,20)
    startdate = enddate + relativedelta(months=-1)
    kaisu = enddate - startdate
    kaisu = int(kaisu.days) 
    kikan = str(startdate) +"~"+ str(enddate)
    
    #Machen Sie eine Liste von Daten und Tagen
    hiduke = str(startdate)
    date_format = "%Y-%m-%d"
    hiduke = dt.strptime(hiduke, date_format)
    weekdays = ["Mond","Feuer","Wasser","Holz","Geld","Boden","Tag"]
    calender_object = []
    youbi_object = []
    for i in range(kaisu):
        hiduke = hiduke + timedelta(days=1)    
        calender_object.append(hiduke)
        youbi = weekdays[hiduke.weekday()] 
        youbi_object.append(youbi)
    
    kaisu = str(kaisu)

    context = {
        'year': year,
        'month': month,
        'kikan': kikan,
        'object_list': object_list,
        'user_list': user_list,
        'shift_object': shift_object,
        'calender_object': calender_object,
        'youbi_object': youbi_object,
        'kaisu': kaisu,
        'shisetsu_object': shisetsu_object,
        'month_total' : month_total,
    }
    return render(request,'schedule/month.html', context)

def scheduleUpdatefunc(request,pk):
    Schedule_list = Schedule.objects.get(pk = int(pk))
    User_list = User.objects.get(username = Schedule_list.user)
    shift_object = Shift.objects.all()
    if request.method == 'POST':
        form = ScheduleUpdateForm(data=request.POST)
        year = Schedule_list.year
        month = Schedule_list.month
        if form.is_valid():
            Schedule_list.shift_name_1 = form.cleaned_data['shift_name_1']
            Schedule_list.shisetsu_name_1 = form.cleaned_data['shisetsu_name_1']
            Schedule_list.shift_name_2 = form.cleaned_data['shift_name_2']
            Schedule_list.shisetsu_name_2 = form.cleaned_data['shisetsu_name_2']
            Schedule_list.shift_name_3 = form.cleaned_data['shift_name_3']
            Schedule_list.shisetsu_name_3 = form.cleaned_data['shisetsu_name_3']
            Schedule_list.shift_name_4 = form.cleaned_data['shift_name_4']
            Schedule_list.shisetsu_name_4 = form.cleaned_data['shisetsu_name_4']
            Schedule_list.day_total_worktime = form.cleaned_data['day_total_worktime']
            Schedule_list.save()
            return HttpResponseRedirect('/schedule/monthschedule/%s/%s/' % (year,month,))

    else:
        item = {
            "shift_name_1":Schedule_list.shift_name_1,
            "shisetsu_name_1": Schedule_list.shisetsu_name_1,
            "shift_name_2": Schedule_list.shift_name_2,
            "shisetsu_name_2": Schedule_list.shisetsu_name_2,
            "shift_name_3": Schedule_list.shift_name_3,
            "shisetsu_name_3": Schedule_list.shisetsu_name_3,
            "shift_name_4": Schedule_list.shift_name_4,
            "shisetsu_name_4": Schedule_list.shisetsu_name_4,
            }
        form = ScheduleUpdateForm(initial=item)
        context = {
            'form' : form,
            'Schedule_list': Schedule_list,
            'User_list': User_list,
            'shift_object': shift_object,
        }

        return render(request,'schedule/update.html', context )


Ich habe ein paar zusätzliche Dinge getan, also habe ich es ein wenig repariert.

Recommended Posts

Übergang zum Update-Bildschirm mit dem Django-Tag
Erstellen eines Anmeldebildschirms in Django all auth
Erstellen Sie mit Django Updateview einen Update-Bildschirm
Erstellen Sie eine REST-API, um dynamodb mit dem Django REST Framework zu betreiben
Die Geschichte, dass "calendar.day_abbr" auf dem Admin-Bildschirm von django nicht aktualisiert werden konnte
[Django] Erstellt ein Feld zur Eingabe von Daten mit 4-stelligen Zahlen
Der einfachste Weg, um mit Django zu beginnen
Erstellen Sie den Registrierungsbildschirm für Django-Mitarbeiter mit Klasse neu
So entwickeln Sie eine Cart-App mit Django
Eine Geschichte über die Implementierung eines Anmeldebildschirms mit Django
Aktualisieren Sie die Django-Version 1.11.1 auf 2.2
Beachten Sie die Lösung, da Django nicht mit pip installiert werden konnte
So erstellen Sie ein Untermenü mit dem Plug-In [Blender]
Lassen Sie uns eine Todo-App mit dem Django REST-Framework erstellen
Erstellen Sie eine Homepage mit Django
Wie aktualisiere ich mit SQLAlchemy?
Erstellen Sie einen Django-Anmeldebildschirm
Suche nach einer Lösung für das N-Queen-Problem mit einem genetischen Algorithmus (2)
Ich möchte einen Blog-Editor mit dem Administrator von Django erstellen
Wahrscheinlich der einfachste Weg, um mit Python 3 ein PDF zu erstellen
Der erste Schritt beim Erstellen einer serverlosen Anwendung mit Zappa
So generieren Sie eine Abfrage mit dem IN-Operator in Django
Eine Geschichte über den Umgang mit dem CORS-Problem
Ich kann mich mit Django 3 nicht auf der Admin-Seite anmelden
Die übliche Art, einen Kernel mit Jupyter Notebook hinzuzufügen
DJango Memo: Von Anfang an (weitere Änderungen am Verwaltungsbildschirm)
Suche nach einer Lösung für das N-Queen-Problem mit einem genetischen Algorithmus (1)
[Python] Erstellen Sie mit Django einen Bildschirm für den HTTP-Statuscode 403/404/500
So registrieren Sie dieselben Daten mehrmals mit einer Eingabe auf dem Verwaltungsbildschirm von Django
[Django lernt mit der Klinge des Teufels] So erhalten Sie einen Abfragesatz für die Vorwärts- / Rückwärtsreferenz
Schritte zur Entwicklung von Django mit VSCode
[Einführung in Python] So teilen Sie eine Zeichenfolge mit der Funktion split
Stellen Sie die Django-Anwendung mit Docker bereit
Standardisieren Sie HTML, um mit Django gemietet zu werden
[Einführung in StyleGAN] Ich habe mit "The Life of a Man" ♬ gespielt
So erstellen Sie einen Befehl zum Lesen der Einstellungsdatei mit Pyramide
Rails-Benutzer versuchen, mit Django eine einfache Blog-Engine zu erstellen
Django-Tipps - Erstellen Sie eine Ranking-Site mit Django-
Ich habe versucht, das Entwicklungsstartverfahren von Django kurz zusammenzufassen
Wie fange ich mit Django an?
Erstellen Sie eine Webanwendung mit Django
Ich wollte das ABC164 A ~ D-Problem mit Python lösen
Schreiben Sie ein Skript, um die Entfernung mit dem Elasticsearch 5-System schmerzfrei zu berechnen
Stellen Sie das Django-Lernprogramm für IIS bereit ①
Aktualisieren Sie Anwendungen, die unter Django 1.7 ausgeführt werden, auf Django 1.8
Ich habe Jinja2 beim Lesen des Dokuments verglichen, um es mit Django zu verwenden
So senden Sie eine Anfrage mit Python an die DMM (FANZA) -API
Erstellen Sie mit Django einen Datei-Uploader
Laden Sie Daten mit einem Befehl und einer Aktualisierung auf s3 von aws hoch und löschen Sie die verwendeten Daten (unterwegs).
[EC2] So machen Sie mit Selen eine Bildschirmaufnahme Ihres Smartphones
Ein Memo zur einfachen Verwendung des Beleuchtungsstärkesensors TSL2561 mit Raspberry Pi 2
[Django 2.2] Fügen Sie neuen Posts mit einem Datum mithilfe eines Vorlagenfilters ein neues Abzeichen hinzu
Überlegen Sie, wie Sie einen Filter mit den Shotgun API-Contact-Versionen schreiben
[Einführung in die Udemy Python3 + -Anwendung] 47. Verarbeiten Sie das Wörterbuch mit einer for-Anweisung
[Python] Erklärt anhand eines konkreten Beispiels, wie die Bereichsfunktion verwendet wird
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung