как я могу отфильтровать набор запросов по флажкам в форме в django?

#python #django

Вопрос:

Мне нужно обновить модель в соответствии с отмеченными флажками в форме 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.фильтр(проверено=поле).обновление(проверено=True, проверен пользователь=запрос.пользователь)

Ответ №1:

Вы можете получить все поля, используя «.values ()» для набора запросов, и чтобы использовать его с помощью ForeignKey, вам необходимо явно указать поля модели:

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

«Значение» из входных данных, оно также будет получено с помощью:
Поскольку может быть несколько значений (отмеченных флажками), появится «.getlist».

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

 

Фильтр набора запросов:

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

в шаблоне html через цикл выполните итерацию и вставьте во входное значение идентификатор модели