【问题标题】:If Else in Djnago ViewsIf Else 在 Django 视图中
【发布时间】:2019-10-12 17:38:05
【问题描述】:

我正在制作 LMS。 用户申请休假而管理员接受或拒绝的情况。 现在我遇到了一个问题,我希望用户通过选择休假类型(休闲、病假、半薪等)通过 Django 表单申请休假,如果管理员接受它,那么数据库中的默认值会更改或从 Employee 模型中扣除,当计数器达到 0 时,会生成您没有任何叶子的错误,请联系管理员。

我无法理解如何为其制定逻辑。

我尝试在视图甚至模型中应用 if else 语句。

views.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 = ['someemail@something.com']  # 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)

forms.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})}

models.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 也不是真正的任务
  • 是的,即使我像往常一样通过它,它也是未定义的。我希望它从 Employee 模型中获取默认值,并比较是否还有叶子。我不明白该怎么做。

标签: django django-models django-forms django-templates django-views


【解决方案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 = ['talhamurtaza@clickmail.info']

        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' 对象没有属性 'employee_leaves_set'
  • 我的错,employee.leave_set.last()
  • 它正在工作谢谢,请向我解释我做错了什么以及如何改进我的逻辑。
  • 我试图在代码 sn-p 中的 python cmets 中解释它,如果我能进一步解释它,我很高兴,但很高兴我能提供帮助。还有,咳嗽 here
  • 但现在我明白了。 /rejectmail/2/ 'NoneType' 对象的 AttributeError 没有属性 'leave_Type'
猜你喜欢
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
相关资源
最近更新 更多