【问题标题】:how can i filter queryset by checked form checkboxes in django?如何通过 django 中的选中表单复选框过滤查询集?
【发布时间】:2021-11-27 00:45:18
【问题描述】:

我需要根据 django 形状中标记的复选框来更新模型 如何只获取查询中的某些表字段

“已检查”行应通过查询集更新 models.py

class moIn(models.Model):
    date = models.DateTimeField(auto_now_add=True, verbose_name='')
    dateUpdate = models.DateTimeField(auto_now=True)
    ts = models.IntegerField(verbose_name='')
    pl = models.IntegerField(verbose_name='')
    rem = models.IntegerField(verbose_name='')
    comment = models.TextField(max_length=200, verbose_name='', blank=True)
    staffer = models.ForeignKey(User, on_delete=models.PROTECT, verbose_name='')
    checked = models.BooleanField(verbose_name='', default=False)
    checkedUser = models.ForeignKey(User, on_delete=models.PROTECT, verbose_name='', blank=True, null=True, related_name='checkedUser')

点击此复选框,您将需要接收数据库记录 forms.py

class checkForm(ModelForm):
    checked = fields.BooleanField(required=False)
    class Meta:
        model = moIn
        fields = {"id", "checked"}

views.py

def dashboard(request):
    if request.user.groups.filter(name='DashBoardAccess').exists():
        form = checkForm
        f = tableDashFilter(request.GET, queryset=moIn.objects.all())
        if request.method == 'POST':
            form = checkForm(request.POST)
            if form.is_valid():
                tt = form.save(commit=False)
                data = form.cleaned_data
                field = data['checked']=True
                f.qs.filter(checked=field).update(checked=True, checkedUser=request.user)
                return HttpResponse('ok')
        else:
            context = {
                'filter': f,
                'form': form
            }
            return render(request, 'dashboard/index.html', context)
    else:
        raise Http404()

在粗体行中,您只需要获取标记复选框的行

f.qs.filter(checked=field).update(checked=True, checkedUser=request.user)

【问题讨论】:

    标签: python django django-rest-framework django-queryset


    【解决方案1】:

    查询集可以使用“.values()”获取所有字段,要与foreignKey一起使用,需要明确指定模型字段:

    f = tableDashFilter(request.GET, queryset=moIn.objects.values('id','date','ts','pl','rem','comment','checked','staffer__username','checkedUser__username'))
    

    "Value" 来自输入,它也将通过以下方式获得: 由于可以有多个值(标记的复选框),因此会有一个“.getlist”

    checkID = request.POST.getlist('checked')
    
    

    querySet 过滤器:

    f.qs.filter(id__in=checkID).update(checked=True, checkedUser=request.user)
    

    在html模板中通过循环,遍历并插入模型id的输入值

    【讨论】:

      猜你喜欢
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      相关资源
      最近更新 更多