Django Как получить данные на основе их pk

Мне нужна приборная панель для сотрудников, которая может видеть все данные пользователей, а также CRUD. как я могу динамически фильтровать пк данных пользователей. Если я использую objects.all, я получаю все, но не могу редактировать определенные значения

from django.contrib.auth.mixins import UserPassesTestMixin
class AdminStaffRequiredMixin(LoginRequiredMixin, UserPassesTestMixin):

    def test_func(self):
        return self.request.user.is_superuser or self.request.user.is_staff




class Dashboard (AdminStaffRequiredMixin, LoginRequiredMixin, ListView):
    model = SchulverzeichnisTabelle
    template_name = 'SCHUK/Dashboard.html'
    context_object_name = 'Dashboard'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['Schulverzeichnis'] = SchulverzeichnisTabelle.objects.all()


        return context

Вы редактируете элемент с UpdateView [Django-doc], поэтому:

from django.views.generic import UpdateView


class DashboardView(AdminStaffRequiredMixin, ListView):
    model = SchulverzeichnisTabelle
    template_name = 'SCHUK/Dashboard.html'
    context_object_name = 'Schulverzeichnis'


class SchulverzeichnisUpdateView(AdminStaffRequiredMixin, ListView):
    model = SchulverzeichnisTabelle
    template_name = 'SCHUK/edit_schulverzeichnis.html'

В url.py вы делаете запись, чтобы отредактировать пункт:

# app_name/urls.py

from django.urls import path

urlpatterns = [
    path('dashboard/', DashboardView.as_view()),
    path(
        'dashboard/schulverzeichnis/<int:pk>/edit/',
        SchulverzeichnisUpdateView.as_view(),
        name='edit-schulverzeichnis',
    ),
]

В вашем шаблоне DashboardView вы затем ссылаетесь на редактирование для этого вида:

<a href="{% url 'edit-schulverzeichnis' pk=obj.pk %}">edit</a>

с obj объектом, который вы используете в ListView. Затем в шаблоне edit_schulverzeichnis.html вы можете использовать {{ form }} и отправить POST-запрос к тому же представлению для обновления.


Примечание: Модели обычно не имеют суффикса Tabelle. Модель - это не таблица, она хранится в реляционной базе данных как таблица, но даже тогда она имеет дополнительную логику, такую как валидаторы, менеджеры и т.д.

.

Примечание: В Django представления, основанные на классах (CBV), часто имеют суффикс …View, чтобы избежать столкновения с именами моделей. Поэтому вы можете переименовать класс представления в DashboardView, вместо Dashboard.

Я не знаю вашу модель, и как она связана с пользователем, но я могу себе представить:

class Dashboard (...):

    # any staff here

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['Schulverzeichnis'] = SchulverzeichnisTabelle.objects.filter(author=self.request.user)
        return context

Кстати, старайтесь использовать в коде только английский язык. Если вы начнете работать в команде, это знание поможет.

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