Как отфильтровать набор запросов по отмеченным флажкам формы в django?
Мне нужно обновить модель в соответствии с отмеченными флажками в форме django Как я могу получить только некоторые поля таблицы в запросе
строка "checked" должна быть обновлена через queryset 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)
.
html
<form action="" method="post">
{%csrf_token%}
<tbody class="table-view__body">
{% for out in filter.qs %}
<tr>
<td>
<label class="custom_Label">
{{form.checked}}
<span class="checkmark"></span>
</label>
</td>
<td>{{out.date|date:"d(D).m.Y"}}</td>
<td>{{out.ts}}</td>
<td>{{out.pl}}</td>
<td>{{out.rem}}</td>
<td>{{out.comment}}</td>
<td>{{out.checked}}</td>
<td>{{out.staffer}}</td>
<td>{{out.checkedUser}}</td>
</tr>
{% endfor %}
</tbody>
</table>
<button type="submit">test</button>
</form>
Вы можете получить все поля, используя ".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')
querySet filter:
f.qs.filter(id__in=checkID).update(checked=True, checkedUser=request.user)
в шаблоне html через цикл, итерацию и вставку во входное значение id модели