我想根据按下的按钮筛选查询集

I want to filter a queryset according to which button is pressed

提问人:RickRugby 提问时间:10/25/2023 最后编辑:George Lords of CastleRickRugby 更新时间:10/28/2023 访问量:28

问:

我对 Django 很陌生。我有一个任务模型,它有各种字段,例如日期、任务名称、描述、is_completed、重要性级别。我根据在模板中单击哪个按钮来过滤结果。我真的被困住了!这是我的代码

'从 Django.db 导入模型

# Create your models here.
class Task(models.Model):
    IMPORTANT_CHOICES = [("high","high"),("mid","mid"),("low","low")]
    taskName = models.CharField(max_length = 100)
    taskDescription = models.CharField(max_length = 100)
    createdDate = models.DateField(auto_now_add = True)
    finishDate = models.DateField(blank=True, null=True)
    last_access = models.DateField(auto_now = True)
    importance = models.CharField(max_length = 20, choices=IMPORTANT_CHOICES, default="low", blank=True, null=True)
    daysToFinish = models.IntegerField(blank=True, null=True)
    completed = models.BooleanField(default = False)

    def __str__(self):
        return self.taskName

views.py

def all_tasks(request, pk):
    person = Person.objects.get(id=pk)
    all_t = person.task_set.all()
    tasks = all_t

    #calulate day to complete task:
    date_now = datetime.now()
    date_now_date = date_now.date()
    for i in tasks:
        finish_date = i.finishDate
        diff = finish_date - date_now_date
        diff_in_days = diff.days
        i.daysToFinish = diff_in_days
        i.save()
     





    if request.POST.get('s') == "completed":
        tasks = tasks.filter(completed = True)

        

    elif request.POST.get('s') == "notcompleted":
        tasks = tasks.filter(completed = False)
        context ={"tasks":tasks}
     


    elif request.POST.get('s') == "high":
        tasks = tasks.filter(importance = "high")
        context ={"tasks":tasks}
        print("high")
        print(tasks)

    elif request.POST.get('s') == "mid":
        tasks = tasks.filter(importance = 'mid')
        context ={"tasks":tasks}
        print(tasks)
        print("mid")

    elif request.POST.get('s') == "low":
        tasks = tasks.filter(importance = 'low')
        context ={"tasks":tasks}
        print(tasks)
        print("low")





    tasks = list(tasks)
    context = {"tasks":tasks}
    return render(request, 'all_tasks.html' ,context)


I then have a template 

<!-- code for sort and select button -->
<div class="container-fluid">
<div class="row">


<form class="" action="{% url 'tasks' user.person.id %}" method="post">
{% csrf_token%}
<div class='col-lg-6'>
<input type="hidden" name="s" value="completed">
<button class="btn1" type="submit" name="button">Completed</button>


</div>

<div class='col-lg-6'>


  <input type="hidden" name="s" value="notcompleted">
  <button class="btn1" type="submit" name="button">Not Completed</button>

</div>

</div>

</div>

<div class="container-fluid">
<div class="row">

<div class='col-lg-4'>


<input type="hidden" name="s" value="high">
<button class="btn1" type="submit" name="button">High</button>


</div>



<div class='col-lg-4'>


  <input type="hidden" name="s" value="low">
  <button class="btn1" type="submit" name="button">Low</button>

</div>

<div>


  <input type="hidden" name="s" value="mid">
  <button class="btn1" type="submit" name="button">Medium</button>
 </form>
</div>

</div>

</div>'
python django 过滤器 单击 django-queryset

评论

0赞 Mess 10/25/2023
你的问题到底是什么?您是否没有根据过滤器参数获得所需的结果?
0赞 nigel222 10/25/2023
你知道 django-filters 包吗?django-filter.readthedocs.io/en/stable

答: 暂无答案