Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django过滤器检查条件_Django - Fatal编程技术网

django过滤器检查条件

django过滤器检查条件,django,Django,这里我使用 age_from:------- age to:-------------- //here ---- is text field date from:------ dat_to:------------- search button // this is my search button. 这里我匹配条件,如果从中选择年龄,它将搜索基于日期(从日期到日期)更大的年龄 以下代码中提到的其他情况也类似: 现在我的问题是: gender : o male o fem

这里我使用

age_from:-------    age to:--------------    //here ---- is text field
date from:------     dat_to:-------------

search button // this is my search button.
这里我匹配条件,如果从中选择年龄,它将搜索基于日期(从日期到日期)更大的年龄 以下代码中提到的其他情况也类似:

现在我的问题是:

gender : o male o female
age_from:-------    age to:--------------
date from:------     dat_to:-------------
现在我怎样才能写出性别部分、年龄部分和日期部分的条件。。这有点让人困惑,我确实。。。帮帮我

def search(request):

    age_from = request.POST["age_from"]
    age_to = request.POST["age_to"]
    date_from = request.POST["date_from"]
    date_to = request.POST["date_to"] 


    if age_from:
        age1 = 1
    if age_to:
        age2 = 1
    if date_from:
        date1 = 1
    if date_to:
        date2 = 1


    if age1 and not age2:
        if date1 and date2:
            patient = PatientInfo.objects.filter(age__gte=age_from , dateedit__range=(date_from,date_to))
        else:
            if date1:
                patient = PatientInfo.objects.filter(age__gte=age_from,dateedit__gte=date_from)
            else:
                if date2:
                    patient = PatientInfo.objects.filter(age__gte=age_from, dateedit__lte=date_to)
                else:
                    patient = PatientInfo.objects.filter(age__gte=age_from)

    if age2 and not age1:
        if date1 and date2:
            patient = PatientInfo.objects.filter(age__lte=age_to, dateedit__range=(date_from,date_to))
        else:
            if date1:
                patient = PatientInfo.objects.filter(age__lte=age_to, dateedit__gte=date_from)
            else:
                if date2:
                    patient = PatientInfo.objects.filter(age__lte=age_to, dateedit__lte=date_to)
                else:
                    patient = PatientInfo.objects.filter(age__lte=age_to)

    if age1 and age2:
        if date1 and date2:
            patient = PatientInfo.objects.filter(age__range=(age_from,age_to),dateedit__range=(date_from,date_to))
        else:
            if date1:
                patient = PatientInfo.objects.filter(age__range=(age_from,age_to),dateedit__gte=date_from)
            else:
                if date2:
                    patient = PatientInfo.objects.filter(age__range=(age_from,age_to),dateedit__lte=date_to)
                else:
                    patient = PatientInfo.objects.filter(age__range=(age_from,age_to))


    if date1 and not date2:
        if age1 and age2:
            patient = PatientInfo.objects.filter(dateedit__gte=date_from, age1__range=(age_from,age_to))
        else:
            if age1:
                patient = PatientInfo.objects.filter(dateedit__gte=date_from, age__gte=age_from)
            else:
                if age2:
                    patient = PatientInfo.objects.filter(dateedit__gte=date_from, age__lte=age_to)
                else:
                    patient = PatientInfo.objects.filter(dateedit__gte=date_from)

    if date2 and not date1:
        if age1 and age2:
            patient = PatientInfo.objects.filter(dateedit__lte=date_to, age1__range=(age_from,age_to))
        else:
            if age1:
                patient = PatientInfo.objects.filter(dateedit__lte=date_to, age__gte=age_from)
            else:
                if age2:
                    patient = PatientInfo.objects.filter(dateedit__lte=date_to, age__lte=age_to)
                else:
                    patient = PatientInfo.objects.filter(dateedit__lte=date_to)

    if date1 and date2:
        if age1 and age2:
            patient = PatientInfo.objects.filter(dateedit__range=(date_from,date_to), age1__range=(age_from,age_to))
        else:
            if age1:
                patient = PatientInfo.objects.filter(dateedit__range=(date_from,date_to),age__gte=age_from)
            else:
                if age2:
                    patient = PatientInfo.objects.filter(dateedit__range=(date_from,date_to), age__lte=age_to)
                else:
                    patient = PatientInfo.objects.filter(dateedit__range=(date_from,date_to))
以上代码适用于年龄和日期部分。。。它工作得很好。。。。 但当出现三种情况时,就会令人困惑。。得不到


请填写性别、年龄和日期部分的代码。。如上所述,thanx提前…

我建议您根据需要添加过滤条件,而不是像您那样尝试分叉代码。下面是一个示例,说明如何做到这一点:

patient = PatientInfo.objects.all(); # getting all patients (don't worry, query is not executed yet)

if age_from:
    patient = patient.filter(age__gte=age_from)

if age_to:
    patient = patient.filter(dateedit__lte=date_to)

if gender:
    patient = patient.filter(gender=gender)

# ...and so on

条件将一个接一个地添加,当您尝试引用结果时,将执行实际查询。django不是很酷吗?

我有点困惑,因为你认为请z为性别、年龄和日期部分编写代码。。。我是django的新手。。plz帮助:(@gur,我不知道你的模型是什么样子,也不知道你的字段是如何命名的,但是我添加了这个例子。希望你能理解这个想法。class PatientInfo(models.Model):gender=models.CharField(max_length=200)age=models.IntegerField()dateedit=models.DateTimeField()这是我的模型,我没有得到性别、年龄和日期部分,事实上它有点让人困惑,你能写代码吗..n我已经如上所述添加了代码。请帮助silverlight@gur,抱歉,如果您不了解查询的工作原理,请阅读文档: