[PYTHON] Créer un écran de mise à jour avec Django Updateview

Depuis la dernière fois, j'ai essayé diverses choses parce que je veux éviter que le nom et la date de l'employé soient modifiés.

J'ai recherché forms.py pendant quelques heures (je n'ai pas appris à l'utiliser), mais cela n'a pas fonctionné.

Finalement, je me suis demandé ce qui se passerait si je faisais la même chose que l'horaire et que je transmettais ce que j'ai fait pour remettre le nom de l'employé, et finalement ça a marché.

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')

C'était tout. Je l'ai eu en ajoutant la dernière ligne

schedule/update.html


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

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

{% block content %}
<form action="" method="POST">{% csrf_token %}
    <P >Nom de l'employé: {{ user.last_name }} {{ user.first_name }}</P>
    <p>Date: {{ schedule.date }}</p>
    <p>Maj 1:{{ form.shift_name_1 }}</p> 
    <p>Nom de l'établissement 1:{{ form.shisetsu_name_1 }}</p>  
    <p>Shift 2:{{ form.shift_name_2 }}</p> 
    <p>Nom de l'établissement 2:{{ form.shisetsu_name_2 }}</p>  
    <p>Shift 3:{{ form.shift_name_3 }}</p> 
    <p>Nom de l'établissement 3:{{ form.shisetsu_name_3 }}</p>  
    <p>Équipe 4:{{ form.shift_name_4 }}</p> 
    <p>Nom de l'établissement 4:{{ form.shisetsu_name_4 }}</p>
    <p>Heures de travail totales:{{ form.day_total_worktime }}</p>
    <input class="btn btn-primary" type="submit" value="mise à jour">
    <a href="{% url 'schedule:homeschedule' %}" class="btn-secondary   btn active">Revenir</a>
</form>
{% endblock content %}

image.png

Vous l'avez maintenant implémenté!

Finalement!

Ensuite, je vais essayer de rendre possible le nombre total d'heures de travail ... J'ai commencé à le faire, mais il y avait un autre problème!

Je ne peux pas revenir à la table des équipes depuis l'écran que je modifie depuis l'écran de mise à jour

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): ###Je n'en avais pas besoin ...
        #return super().get_queryset().select_related('user')
        #return super().get_queryset().select_related('schedule')
        #return super().get_queryset().select_related('Shift')

Essayer diverses choses, un peu plus de 2 heures ... J'ai déjà abandonné

Je vais le recréer avec la fonction def! Je ne sais pas si cela peut être fait immédiatement simplement parce que c'est une fonction (rires)

Défi pour le moment (⌒∇⌒)

Cela a pris environ 2 heures, mais c'était possible! Enfin j'ai aussi utilisé forms.py (encore loin d'être compris, mais il est important de changer 0 en 1)

まずは、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 )

Le code est long, mais la plupart relient simplement quels champs à quels champs, J'ai pu le faire dès que j'ai commencé à le faire.

次に初めてトライした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 nom d'équipe', related_name='shift_name1',on_delete=models.SET_NULL,null= True)
        #shisetsu_name_1 = forms.ForeignKey(Shisetsu, verbose_name='1 établissement', related_name='shisetsu_name1',on_delete=models.SET_NULL,blank=True, null=True)
        #shift_name_2 = forms.ForeignKey(Shift, verbose_name='2 nom d'équipe', related_name='shift_name2',on_delete=models.SET_NULL,blank=True, null=True)
        #shisetsu_name_2 = forms.ForeignKey(Shisetsu, verbose_name='2 installations', related_name='shisetsu_name2',on_delete=models.SET_NULL,blank=True, null=True)
        #shift_name_3 = forms.ForeignKey(Shift, verbose_name='3 nom d'équipe', related_name='shift_name3',on_delete=models.SET_NULL,blank=True, null=True)
        #shisetsu_name_3 = forms.ForeignKey(Shisetsu, verbose_name='3 installations', related_name='shisetsu_name3',on_delete=models.SET_NULL,blank=True, null=True)
        #shift_name_4 = forms.ForeignKey(Shift, verbose_name='4 nom d'équipe', related_name='shift_name4',on_delete=models.SET_NULL,blank=True, null=True)
        #shisetsu_name_4 = forms.ForeignKey(Shisetsu, verbose_name='4 établissements', related_name='shisetsu_name4',on_delete=models.SET_NULL,blank=True, null=True)

Comme le contrôle d'entrée n'était pas bien lié au début, il y a des preuves de collage à partir de modèles (rires)

J'ai édité un peu le html

schedule/update.html


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

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

{% block content %}
<form action="" method="POST">{% csrf_token %}
    <P >Nom de l'employé: {{ User_list.last_name }} {{ User_list.first_name }}</P>
    <p>Date: {{ Schedule_list.date }}</p>
    {{ form.as_p }}
    {% csrf_token %}
    <input class="btn btn-primary" type="submit" value="mise à jour">
    <a href="{% url 'schedule:homeschedule' %}" class="btn-secondary   btn active">Revenir</a>
</form>
{% endblock content %}

Vous pouvez maintenant revenir au mois que vous modifiez en appuyant sur le bouton de mise à jour sur l'écran de correction.

image.png

image.png

Recommended Posts

Créer un écran de mise à jour avec Django Updateview
Créer une API avec Django
Créer un environnement avec virtualenv
Créer une page d'accueil avec django
Créer un écran de connexion Django
Transition vers l'écran de mise à jour avec le Django a tag
Créer une fonction d'authentification à l'aide de django-allauth et CustomUser dans Django
Créer une application Todo avec Django ① Créer un environnement avec Docker
[Python] Créer un écran pour le code d'état HTTP 403/404/500 avec Django
Charger les modules Django avec un interpréteur
Créer un défilement d'écran avec Pythonista + scene
Créez une tranche d'âge avec les pandas
Remarque: envoyer un e-mail avec Django
Créer un téléchargeur de fichiers avec Django
mise à jour de Django
Créer un environnement pour Django x Apache x mod_wsgi avec Vagrant (Ubuntu 16.04)
Créer une application en classifiant avec Pygame
Créer une visionneuse de traitement d'image avec PySimpleGUI
Parcourir une base de données externe existante avec Django
Créez rapidement un fichier Excel avec Python #python
Créer un écran de connexion dans Django all auth
Création de la première application avec Django startproject
[Python] Créez rapidement une API avec Flask
Générer une instance Excel compatible avec les compléments avec xlwings
Créez une application de mots anglais avec python
Créez un fichier msi évolutif avec cx_Freeze
Créez une application qui devine les étudiants avec Python
Créer un programme académique avec optimisation des combinaisons
Recréez l'écran d'inscription du personnel de Django avec la classe
Internationalisation avec Django
Créez un tableau de bord pour les appareils réseau avec Django!
Créer un environnement de Nginx + uWSGI + Python (Django) avec docker
Une histoire sur l'implémentation d'un écran de connexion avec django
Créer une image avec des caractères avec python (japonais)
CRUD avec Django
Créez une application Hello World avec un seul fichier avec django
Créez rapidement un serveur API avec Python + Falcon
Créer un serveur local GIF animé avec Python + Flask
Procédure de création d'une application avec Django avec Pycharm ~ Préparation ~
Créer une application Todo avec Django REST Framework + Angular
Essayez de créer une application Todo avec le framework Django REST
Créer une API autour de l'authentification des utilisateurs avec Django REST Framework
Créez un tweet idole avec Keras LSTM (génération de phrases)
Un moyen simple de créer un module d'importation avec jupyter
Créer une application Todo avec Django ③ Créer une page de liste de tâches
Déployer une application existante avec docker + pyenv-virtualenv + uwsgi + django
Créez une application qui devine les étudiants avec la version python-GUI
Créer un nombre aléatoire avec une densité de probabilité arbitraire
Créez dynamiquement des tables dans un schéma avec Django, générez dynamiquement des modèles
Créez un environnement Open AI Gym avec Bash sur Windows 10
Créer une application Todo avec Django ⑤ Créer une fonction d'édition de tâches
Créer un environnement django avec docker-compose (MariaDB + Nginx + uWSGI)
Créez un environnement pour l'automatisation des tests avec AirtestIDE (Astuces)
Django 1.11 a démarré avec Python3.6
Résumé du développement avec Django
Créer un planning Django
Sortie PDF avec Django
Sortie Markdown avec Django