Как обновить только выбранные записи в Django queryset, как в действиях панели администратора?

Сразу прошу прощения за ошибки, английский не является моим родным языком (этот текст переведен гуглом)

Здравствуйте, я новичок в django и у меня есть вопрос. У меня есть таблица в DB с полями и булевым значением "checked". Нужно дать доступ к проверке записей другим пользователям, при этом я не хотел бы давать доступ к админ панели. Как я могу показать чекбокс в представлении вместе с кверисетом в таблице, чтобы установить значение true в таблице и обновить только строки, выбранные этим чекбоксом? Это должно работать как "Action" в админпанели django

P.S. Я пробовал через форму, но она только создает новую запись

p.p.s Теперь получается только обновить ВСЕ записи таблицы

Вот мой model.py

class moneIn(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')


    def __str__(self):
        return '{0}'.format(self.date)
        # return self.user

    class Meta:
        ordering = ['-date']
        verbose_name = ''
        verbose_name_plural = ''


Необходимо изменить параметр "checked" через шаблон и автоматически вставить пользователя, отправившего запрос, в "checkedUser"

P.p.p.s Кроме того, я использую приложение Django filter для фильтрации

views.py

@login_required
# @user_passes_test(is_member_group)
def dashboard(request):
    if request.user.groups.filter(name='DashBoardAccess').exists():
        form = checkForm
        f = tableDashFilter(request.GET, queryset=mIn.objects.all())
        if request.method == 'POST':
            form = checkForm(request.POST)
            if form.is_valid():
                data = form.cleaned_data
                f.queryset.checked = data['checked']
                f.queryset.update(**data)
                return HttpResponse('ok')
        else:
            context = {
                'filter': f,
                'form': form
            }
            return render(request, 'dashboard/index.html', context)
    else:
        raise Http404()

HTML

<form action="" method="post">
                {%csrf_token%}
                <tbody class="table-view__body">
                    {% for out in filter.qs %}
                    <tr>
                        <td>{{form.checked}}</td>
                        <td>{{out.date|date:"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>
                    {% endfor %}
                </tbody>
            </table>
            <button type="submit">test</button>
        </form>

Вам необходимо правильно отфильтровать набор запросов, к которому применяется .update().

Это:

f.queryset.update(**data)

Credit to: как отфильтровать набор запросов по отмеченным флажкам формы в django?

Вернуться на верх