Если еще в Djnago Views

Я делаю СУО. Когда Пользователь подает заявку на отпуск, а администратор принимает или отклоняет его. Прямо сейчас я застрял в проблеме, когда я хочу, чтобы пользователь подал заявку на отпуск через форму Django, выбрав тип отпуска (случайный, больничный, половинная оплата и т. д.), если администратор принимает его, тогда значения по умолчанию в базе данных изменяются или вычитается из модели Сотрудник, и когда счетчик достигает 0, генерируется ошибка, что у вас нет отпусков, свяжитесь с администратором.

Я не могу понять, как сделать логику для этого.

Я попытался применить оператор if else в представлениях и даже в моделях.

просмотры.py

The function name is "Reject" as I am trying to make changes to the accept function.



def reject_leave(request, id): 
    # employee_item = Employee.objects.get(id=id)
    all_item = Leave.objects.get(id=id)
    all = Employee.objects.get(id=id)
    context = {'all': all,'all_item': all_item}

'''
if the leave_type (choice field of the leaves from the django form) equals to a leave type like Annual leave 

The the program deducts 1 or the amount entered from the total value of Annual leave from the Model Employee
'''

*Sorry for the poor writing I'm not experienced in Django*


***This code is saying that in an illogical way.***

 if leave_type.id is "Annual_leave":
                Annual_leave - 1
    else:
                subject = "Leave Rejected"  # email subject
                email_from = "settings.EMAIL_HOST_USER"  # email from
                to_email = ['[email protected]']  # email to

                with open(...) as f:
                    msgbody = f.read()
                    msg = EmailMultiAlternatives(
                    subject=subject, body=msgbody, from_email=email_from, to=to_email)
                    html_template = get_template(...).render()
                    msg.attach_alternative(html_template, "text/html")
                    msg.send()

    return render(request, 'projectfiles/rejectemail.html',context)

формы.py


class Leave_Form(forms.ModelForm):
    to_date = forms.DateField(
        widget=forms.DateInput(format=('%m/%d/%y'),
                               attrs = {'class': 'form-control',
                                      'placeholder': ' Month/Date/Year'}))


    from_date = forms.DateField(
        widget=forms.DateInput(format=('%m/%d/%y'),
                               attrs = {'class': 'form-control',
                               'placeholder':' Month/Date/Year'}))

    class Meta:
        model = Leave
        fields = ['leave_Type', 'description',
                  'from_date', 'to_date', 'leave_qty']
        exclude = ['employee_leaves', 'submit_date']
        leave_type_choice = (

            ("Annual_leave", "Annual leave"),
            ("Sick_leave", "Sick leave"),
            ("Casual_leave", "Casual leave"),
            ("Emergency_leave", "Emergency leave"),
            ("Half_pay","Half Pay")
    )

        widgets = {


            'leave_Type': forms.Select(choices = leave_type_choice, attrs = {'class': 'form-control'}),
            'description': forms.Textarea(
                attrs = {'class': 'form-control','placeholder': 'Enter description here', 'rows': 3, 'cols': 21})}

модели.py



class Employee(models.Model):

    employee_name = models.OneToOneField(User, on_delete = models.CASCADE)
    employee_designation = models.CharField(max_length = 20)
    employee_department = models.CharField(max_length = 35)
    Annual_leave = models.PositiveSmallIntegerField(default=10)
    Sick_leave = models.PositiveSmallIntegerField(default=3)
    Casual_leave = models.PositiveSmallIntegerField(default=3)
    Half_pay = models.PositiveSmallIntegerField(default=4)
    Emergency_leave = models.PositiveSmallIntegerField(default=3)
    allowed = models.BooleanField(default=False)



    def __str__(self):
                return self.employee_name.username

    class Meta:
        verbose_name_plural = "Employee"





class Leave(models.Model):

    employee_leaves = models.ForeignKey(Employee, on_delete=models.CASCADE)
    leave_Type = models.CharField(max_length=25)
    leave_qty = models.PositiveSmallIntegerField(default=0)
    description = models.CharField(max_length=75, blank=True, null=True)
    submit_date = models.DateTimeField(auto_now_add=True)
    from_date = models.DateField(auto_now=False, auto_now_add=False)
    to_date = models.DateField(auto_now=False, auto_now_add=False)



    class Meta:
        verbose_name_plural = "Leave"

    def __str__(self):
        return self.leave_Type + "  by  " + str(self.employee_leaves)

Когда Админ принимает (или в данном случае отклоняет) отпуск. например Больничный Я хочу, чтобы 1 или введенное количество отпусков вычиталось из общего количества выделенных больничных листов.

if leave_type.id is "Annual_leave":? leave_type кажется неопределенным. Также Annual_leave - 1 это не настоящее задание
Snackoverflow 27.05.2019 09:02

да, это не определено, даже если я передам его как обычно. Я хочу, чтобы он извлек значения по умолчанию из модели Работник и сравнил, остались ли какие-либо листья. Я не понимаю, как это сделать.

Talha Murtaza 27.05.2019 09:06
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
927
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
def reject_leave(request, id):  # overwriting built-in id is not a good idea
    all_item = Leave.objects.get(id=id)  # This is a single item, not all items
    all = Employee.objects.get(id=id)  # this again is a single item, not all items
    context = {'all': all, 'all_item': all_item}

    if leave_type.id is "Annual_leave":
    # What is leave_type?
        Annual_leave - 1 
        # What is Annual_leave? What does -1 supposed to do? 
    # Maybe you meant 
    # employee = Employee.objects.get(id=id)
    # leave = employee.employee_leaves_set.last() 
    # if leave.leave_Type == 'Annual_leave':
    #     employee.Annual_leave -= 1
    #     employee.save()
    else:
        subject = "Leave Rejected"
        email_from = "settings.EMAIL_HOST_USER"
        to_email = ['[email protected]']

        with open('...') as f:
            msgbody = f.read()
            msg = EmailMultiAlternatives(
                subject=subject, body=msgbody, from_email=email_from, to=to_email)
            html_template = get_template(
                "...").render()
            msg.attach_alternative(html_template, "text/html")
            msg.send()

    return render(request, 'projectfiles/rejectemail.html', context)

В этом так много неправильного, что я могу с уверенностью сказать, что вы не изучали учебник по python, не читали pep-8 и не изучали учебник по django. Поэтому, пожалуйста, начните с первого и продвигайтесь вверх.

Объект «Сотрудник» не имеет атрибута «employee_leaves_set»

Talha Murtaza 27.05.2019 09:22

Мой плохой, employee.leave_set.last()

Işık Kaplan 27.05.2019 09:30

Это работает СПАСИБО и, пожалуйста, объясните мне, что я сделал неправильно и как я могу улучшить свою логику.

Talha Murtaza 27.05.2019 09:37

Я попытался объяснить это в комментариях к Python во фрагменте кода, не знаю, смогу ли я объяснить это дальше, но рад, что смог помочь. Кроме того, кашляетздесь

Işık Kaplan 27.05.2019 09:40

Но теперь я получаю это. AttributeError в объекте /rejectmail/2/ 'NoneType' нет атрибута 'leave_Type'

Talha Murtaza 27.05.2019 10:27

Это означает, что у работника нет отпусков.

Işık Kaplan 27.05.2019 10:28

Другие вопросы по теме