[PYTHON] Django Faites des choix uniquement pour l'établissement auquel vous appartenez

Le développement avance au même rythme qu'avant, mais je n'ai pas pu poster.

Cette fois, lors de l'enregistrement de quelque chose, j'essaierai de sélectionner uniquement le magasin auquel j'appartiens. Cela vous évite de sélectionner accidentellement un décalage souhaité lors de l'enregistrement d'un décalage souhaité même si vous appartenez uniquement à Pu-a-Pu.

Avant correction

image.png

Lorsque je l'ai recherché, j'ai pu y remédier en ajoutant forms.py et des vues.

views.py


    def get_form_kwargs(self):
        kwargs = super(KibouCreate, self).get_form_kwargs()
        kwargs['user'] = self.request.user
        return kwargs

Je n'ai pas saisi l'image parce que je le fais moi-même, mais quand j'obtiens les informations du formulaire, j'imagine que je vais transmettre mes propres informations, faire traiter le résultat par le formulaire et le renvoyer en Html. Je vais.

forms.py


class kibouCreateForm(forms.ModelForm):
    class Meta:
        shift_object = Shift.objects.all()
        model = KibouShift
        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')
        widgets = {
            'date': datetimepicker.DatePickerInput(
            format='%Y-%m-%d',
            options={
                'locale': 'ja',
                'dayViewHeaderFormat': 'AAAA année MMMM',
                'ignoreReadonly': True,
                'allowInputToggle': True,
                }
            ),
        }
    def __init__(self, *args, **kwargs):
        #Seule la liste d'affiliation peut être sélectionnée
        user = kwargs.pop('user')
        UserShozoku_list = UserShozokuModel.objects.filter(user = user.id).values_list("shisetsu_name", flat=True)
        UserShozoku_list = list(UserShozoku_list)
        super(kibouCreateForm, self).__init__(*args, **kwargs)
        self.fields['shisetsu_name_1'].queryset = Shisetsu.objects.filter(id__in = UserShozoku_list).all()
        self.fields['shisetsu_name_2'].queryset = Shisetsu.objects.filter(id__in = UserShozoku_list).all()
        self.fields['shisetsu_name_3'].queryset = Shisetsu.objects.filter(id__in = UserShozoku_list).all()
        self.fields['shisetsu_name_4'].queryset = Shisetsu.objects.filter(id__in = UserShozoku_list).all()

    """
Vérification des délais
    """
    def clean_date(self):
        dt_now = datetime.datetime.now()
        dt_date = self.cleaned_data.get('date')
        #Entrez seulement après le 20 au 5e
        if dt_now.day > 5:
            startdate = datetime.date(dt_now.year,dt_now.month,20) + relativedelta(months=1)
            if dt_date < startdate:
                raise forms.ValidationError(
                "La date limite est passée, veuillez donc contacter l'administrateur.",
                )
        else:
            startdate = datetime.date(dt_now.year,dt_now.month,20)
            if dt_date < startdate:
                raise forms.ValidationError(
                "La date limite est passée, veuillez donc contacter l'administrateur.",
                )
        return self.cleaned_data.get('date')
    def clean(self):

        ############
        #revérifier
        ############
        dt_user = self.cleaned_data.get('user')
        dt_date = self.cleaned_data.get('date')
        if KibouShift.objects.filter(user=dt_user, date=dt_date).count() > 0:
            raise forms.ValidationError("Je ne peux pas m'inscrire car le quart de travail souhaité le même jour a déjà été enregistré. Corrigez cela, s'il-vous-plaît.")

        dt_shift_name1 = self.cleaned_data.get('shift_name_1')
        dt_shift_name2 = self.cleaned_data.get('shift_name_2')
        dt_shift_name3 = self.cleaned_data.get('shift_name_3')
        dt_shift_name4 = self.cleaned_data.get('shift_name_4')
        dt_shisetsu_name_1 = self.cleaned_data.get('shisetsu_name_1')
        dt_shisetsu_name_2 = self.cleaned_data.get('shisetsu_name_2')
        dt_shisetsu_name_3 = self.cleaned_data.get('shisetsu_name_3')
        dt_shisetsu_name_4 = self.cleaned_data.get('shisetsu_name_4')
        #Si l'équipe est fermée, l'installation sera laissée vide
        if str(dt_shift_name1) == "Fermé" or str(dt_shift_name1) == "Oui" or str(dt_shift_name1) == "ne pas":
            if dt_shift_name2 != None or dt_shift_name3 != None or dt_shift_name4 != None or dt_shisetsu_name_1 != None or dt_shisetsu_name_2 != None or dt_shisetsu_name_3 != None or dt_shisetsu_name_4 != None:
                raise forms.ValidationError("Aucune autre entrée n'est requise pour les équipes «vacances», «oui» et «non».")

ensuite image.png

Ce n'est plus que l'établissement auquel j'appartiens.

En passant, je voudrais rendre la sélection des utilisateurs possible uniquement pour ceux qui ont la permission d'ajouter des horaires.

J'ai juste ajouté un peu. Même ainsi, je l'ai recherché pendant environ une heure et je l'ai implémenté (rires)

À l'origine, je pense qu'il est préférable de pouvoir sélectionner une installation pour chaque utilisateur sélectionné, mais il est nécessaire de concevoir comme l'implémenter avec javascript ou l'obtenir en appuyant sur un bouton.

Vous devez améliorer vos compétences à l'avenir.

forms.py


    def __init__(self, *args, **kwargs):
        #Seule la liste d'affiliation peut être sélectionnée
        user = kwargs.pop('user')
        UserShozoku_list = UserShozokuModel.objects.filter(user = user.id).values_list("shisetsu_name", flat=True)
        UserShozoku_list = list(UserShozoku_list)
        super(kibouCreateForm, self).__init__(*args, **kwargs)
        self.fields['shisetsu_name_1'].queryset = Shisetsu.objects.filter(id__in = UserShozoku_list).all()
        self.fields['shisetsu_name_2'].queryset = Shisetsu.objects.filter(id__in = UserShozoku_list).all()
        self.fields['shisetsu_name_3'].queryset = Shisetsu.objects.filter(id__in = UserShozoku_list).all()
        self.fields['shisetsu_name_4'].queryset = Shisetsu.objects.filter(id__in = UserShozoku_list).all()

        #Il est préférable de changer pour chaque utilisateur sélectionné, mais il est nécessaire d'obtenir et de fonctionner avec un script ou un bouton Java
        #Modifier la sélection de l'utilisateur si vous êtes autorisé à ajouter un horaire
        permissions = Permission.objects.filter(user=user)
        if user.has_perm('schedule.add_KibouShift'):
            self.fields['user'].queryset = CustomUser.objects.all()
        else:
            self.fields['user'].queryset = CustomUser.objects.filter(username=user.username).all()

En passant, je l'ai changé en CustomUser au lieu de l'objet User préparé à l'origine. J'ai effacé la base de données et recommencé, donc les données sont devenues égales.

Recommended Posts

Django Faites des choix uniquement pour l'établissement auquel vous appartenez
Table de décalage Django Afficher uniquement les installations auxquelles vous appartenez
Comment enregistrer une seule donnée sur l'écran de gestion de Django
django + nginx Comment faire en sorte que seuls les utilisateurs connectés voient les images
Déployer le didacticiel Django sur IIS ①
Démarrez Django pour la première fois
La façon la plus simple de faire un flacon
Un script shell pour se souvenir à nouveau du shell pipenv
Depuis Django 1.8, vous pouvez passer un objet appelable à l'attribut choice de forms.ChoiceField, ce qui est très pratique.
Comment vérifier la version de Django
Récupérez uniquement le texte du formulaire Django.
Tout refaire pour l'écran de connexion Django
J'ai essayé de résumer les paramètres des différentes bases de données de Django (MySQL, PostgreSQL)
Si vous souhaitez créer une application TODO (distribuée) maintenant en utilisant uniquement Python
Utilisez Pillow pour rendre l'image transparente et en superposer une partie seulement