[PYTHON] Erstellen Sie mit Django Updateview einen Update-Bildschirm

Seit dem letzten Mal habe ich verschiedene Dinge ausprobiert, weil ich verhindern möchte, dass der Name und das Datum des Mitarbeiters bearbeitet werden.

Ich habe ein paar Stunden lang nach forms.py recherchiert (ich habe nicht gelernt, wie man es benutzt), aber es hat nicht funktioniert.

Schließlich fragte ich mich, was passieren würde, wenn ich das Gleiche wie den Zeitplan tun und übergeben würde, was ich tun würde, um den Namen des Mitarbeiters zu übergeben, und schließlich funktionierte es.

schedule/views.py


class ScheduleUpdate(UpdateView):
    template_name = 'schedule/update.html'
    model = Schedule
    fields = ('user','date', 'shift_name_1', 'shisetsu_name_1', 'shift_name_2', 'shisetsu_name_2', 'shift_name_3', 'shisetsu_name_3','shift_name_4', 'shisetsu_name_4', 'day_total_worktime')
    success_url = reverse_lazy('schedule:homeschedule')

    #def get_queryset(self):
    #    return super().get_queryset().select_related('user')
    #    return super().get_queryset().select_related('schedule')

Das war alles. Ich habe es durch Hinzufügen der letzten Zeile erhalten

schedule/update.html


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

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

{% block content %}
<form action="" method="POST">{% csrf_token %}
    <P >Mitarbeitername: {{ user.last_name }} {{ user.first_name }}</P>
    <p>Datum: {{ schedule.date }}</p>
    <p>Schicht 1:{{ form.shift_name_1 }}</p> 
    <p>Name der Einrichtung 1:{{ form.shisetsu_name_1 }}</p>  
    <p>Schicht 2:{{ form.shift_name_2 }}</p> 
    <p>Name der Einrichtung 2:{{ form.shisetsu_name_2 }}</p>  
    <p>Schicht 3:{{ form.shift_name_3 }}</p> 
    <p>Name der Einrichtung 3:{{ form.shisetsu_name_3 }}</p>  
    <p>Schicht 4:{{ form.shift_name_4 }}</p> 
    <p>Name der Einrichtung 4:{{ form.shisetsu_name_4 }}</p>
    <p>Gesamtarbeitszeit:{{ form.day_total_worktime }}</p>
    <input class="btn btn-primary" type="submit" value="aktualisieren">
    <a href="{% url 'schedule:homeschedule' %}" class="btn-secondary   btn active">Rückkehr</a>
</form>
{% endblock content %}

image.png

Sie haben es jetzt implementiert!

Schließlich!

Als nächstes werde ich versuchen, die Gesamtarbeitszeit möglich zu machen ... Ich habe damit angefangen, aber es gab noch ein anderes Problem!

Ich kann vom Bildschirm, den ich vom Aktualisierungsbildschirm aus bearbeite, nicht zur Verschiebungstabelle zurückkehren

python:schedule.views.py


class ScheduleUpdate(UpdateView):
    template_name = 'schedule/update.html'
    model = Schedule
    fields = ('shift_name_1', 'shisetsu_name_1', 'shift_name_2', 'shisetsu_name_2', 'shift_name_3', 'shisetsu_name_3','shift_name_4', 'shisetsu_name_4', 'day_total_worktime')
    year = Schedule.year
    month = Schedule.month
    #success_url = reverse_lazy('schedule:monthschedule', kwargs={"year": self.object.year})
    #success_url = HttpResponseRedirect('/schedule/monthschedule/%s/%s/' % (Schedule.year,Schedule.month,))
    success_url = reverse_lazy('/schedule/monthschedule/%s/%s/' % (year,month))

    #def get_url_success(self):
    #    url = "/schedule/monthschedulefunc/" + self.year +"/"+ self.month
    #    return HttpResponseRedirect(url)

    def get_queryset(self): ###Ich brauchte es nicht ...
        #return super().get_queryset().select_related('user')
        #return super().get_queryset().select_related('schedule')
        #return super().get_queryset().select_related('Shift')

Ich probiere verschiedene Dinge aus, etwas mehr als 2 Stunden ... Ich habe schon aufgegeben

Ich werde es mit der def-Funktion neu erstellen! Ich bin mir nicht sicher, ob es sofort möglich ist, nur weil es eine Funktion ist (lacht)

Herausforderung vorerst (⌒∇⌒)

Es dauerte ungefähr 2 Stunden, aber es war möglich! Schließlich habe ich auch forms.py verwendet (noch weit vom Verständnis entfernt, aber es ist wichtig, 0 in 1 zu ändern)

まずは、views.py

schedule/views.py


def scheduleUpdatefunc(request,pk):
    Schedule_list = Schedule.objects.get(pk = int(pk))
    User_list = User.objects.get(username = Schedule_list.user)
    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,
        }

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

Der Code ist lang, aber die meisten verbinden nur welche Felder mit welchen Feldern Ich konnte es tun, sobald ich anfing, es zu machen.

次に初めてトライしたforms.py

schedule/forms.py


class ScheduleUpdateForm(forms.ModelForm):
    class Meta:
        model = Schedule
        fields = ('shift_name_1', 'shisetsu_name_1', 'shift_name_2', 'shisetsu_name_2', 'shift_name_3', 'shisetsu_name_3','shift_name_4', 'shisetsu_name_4', 'day_total_worktime')
        #shift_name_1 = forms.ForeignKey(Shift, verbose_name='1 Schichtname', related_name='shift_name1',on_delete=models.SET_NULL,null= True)
        #shisetsu_name_1 = forms.ForeignKey(Shisetsu, verbose_name='1 Einrichtung', related_name='shisetsu_name1',on_delete=models.SET_NULL,blank=True, null=True)
        #shift_name_2 = forms.ForeignKey(Shift, verbose_name='2 Schichtname', related_name='shift_name2',on_delete=models.SET_NULL,blank=True, null=True)
        #shisetsu_name_2 = forms.ForeignKey(Shisetsu, verbose_name='2 Einrichtungen', related_name='shisetsu_name2',on_delete=models.SET_NULL,blank=True, null=True)
        #shift_name_3 = forms.ForeignKey(Shift, verbose_name='3 Schichtname', related_name='shift_name3',on_delete=models.SET_NULL,blank=True, null=True)
        #shisetsu_name_3 = forms.ForeignKey(Shisetsu, verbose_name='3 Einrichtungen', related_name='shisetsu_name3',on_delete=models.SET_NULL,blank=True, null=True)
        #shift_name_4 = forms.ForeignKey(Shift, verbose_name='4 Schichtname', related_name='shift_name4',on_delete=models.SET_NULL,blank=True, null=True)
        #shisetsu_name_4 = forms.ForeignKey(Shisetsu, verbose_name='4 Einrichtungen', related_name='shisetsu_name4',on_delete=models.SET_NULL,blank=True, null=True)

Da die Eingabesteuerung zunächst nicht gut verknüpft war, gibt es Hinweise auf das Einfügen von Modellen (lacht)

Ich habe HTML ein wenig bearbeitet

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:homeschedule' %}" class="btn-secondary   btn active">Rückkehr</a>
</form>
{% endblock content %}

Jetzt können Sie zu dem Monat zurückkehren, den Sie bearbeiten, indem Sie auf dem Korrekturbildschirm auf die Schaltfläche Aktualisieren klicken.

image.png

image.png

Recommended Posts

Erstellen Sie mit Django Updateview einen Update-Bildschirm
Erstellen Sie eine API mit Django
Erstellen Sie eine Umgebung mit virtualenv
Erstellen Sie eine Homepage mit Django
Erstellen Sie einen Django-Anmeldebildschirm
Übergang zum Update-Bildschirm mit dem Django-Tag
Erstellen Sie eine Authentifizierungsfunktion mit django-allauth und CustomUser in Django
Erstellen einer Todo-App mit Django ① Erstellen Sie eine Umgebung mit Docker
[Python] Erstellen Sie mit Django einen Bildschirm für den HTTP-Statuscode 403/404/500
Laden Sie ein Django-Modul mit einem Interpreter
Erstellen Sie eine Bildlaufrolle mit Pythonista + -Szene
Erstellen Sie eine Altersgruppe mit Pandas
Hinweis: Senden Sie eine E-Mail mit Django
Erstellen Sie mit Django einen Datei-Uploader
Django-Update
Erstellen Sie mit Vagrant (Ubuntu 16.04) eine Umgebung für Django x Apache x mod_wsgi.
Erstellen Sie eine Anwendung, indem Sie mit Pygame klassifizieren
Erstellen Sie mit PySimpleGUI einen Bildverarbeitungs-Viewer
Durchsuchen Sie eine vorhandene externe Datenbank mit Django
Erstellen Sie schnell eine Excel-Datei mit Python #python
Erstellen eines Anmeldebildschirms in Django all auth
Erstellen der ersten App mit Django Startprojekt
[Python] Erstellen Sie schnell eine API mit Flask
Generieren Sie eine add-in-fähige Excel-Instanz mit xlwings
Erstellen Sie eine englische Wort-App mit Python
Erstellen Sie mit cx_Freeze eine aktualisierbare MSI-Datei
Erstellen Sie eine App, die Schüler mit Python errät
Erstellen Sie ein akademisches Programm mit Kombinationsoptimierung
Erstellen Sie den Registrierungsbildschirm für Django-Mitarbeiter mit Klasse neu
Internationalisierung mit Django
Erstellen Sie mit Django ein Dashboard für Netzwerkgeräte!
Erstellen Sie mit Docker eine Umgebung aus Nginx + uWSGI + Python (Django)
Eine Geschichte über die Implementierung eines Anmeldebildschirms mit Django
Erstellen Sie ein Bild mit Zeichen mit Python (Japanisch)
CRUD mit Django
Erstellen Sie mit Django eine Hallo-Welt-Anwendung mit nur einer Datei
Erstellen Sie schnell einen API-Server mit Python + Falcon
Erstellen Sie mit Python + Flask einen animierten lokalen GIF-Server
Verfahren zum Erstellen einer Anwendung mit Django mit Pycharm ~ Vorbereitung ~
Erstellen Sie eine Todo-App mit Django REST Framework + Angular
Lassen Sie uns eine Todo-App mit dem Django REST-Framework erstellen
Erstellen Sie eine API für die Benutzerauthentifizierung mit Django REST Framework
Machen Sie einen idolartigen Tweet mit Keras LSTM (Satzgenerierung)
Eine einfache Möglichkeit, ein Importmodul mit jupyter zu erstellen
Todo-App mit Django erstellen ③ Aufgabenlistenseite erstellen
Stellen Sie eine vorhandene App mit Docker + Pyenv-Virtualenv + Uwsgi + Django bereit
Erstellen Sie eine App, die Schüler mit der Python-GUI-Version errät
Erstellen Sie eine Zufallszahl mit einer beliebigen Wahrscheinlichkeitsdichte
Erstellen Sie mit Django dynamisch Tabellen im Schema und generieren Sie dynamisch Modelle
Erstellen Sie eine Open AI Gym-Umgebung mit Bash unter Windows 10
Todo-App mit Django erstellen ⑤ Funktion zum Bearbeiten von Aufgaben erstellen
Erstellen Sie eine Django-Umgebung mit Docker-Compose (MariaDB + Nginx + uWSGI).
Erstellen Sie mit AirtestIDE eine Umgebung für die Testautomatisierung (Tipps)
Django 1.11 wurde mit Python3.6 gestartet
Entwicklungsverdauung mit Django
Erstellen Sie einen Django-Zeitplan
PDF mit Django ausgeben
Markdown-Ausgabe mit Django