Django не находит объект базы данных при попытке визуализации представления

При переходе по url /val/4/13/bs я получаю следующую ошибку:

Page not found (404)
Request Method: GET
Request URL:    http://127.0.0.1:8000/val/4/13/bs
Raised by:  valapp.views.BSDetail
No balance sheet found matching the query

Вот код views.py:

class BSDetail(generic.View):
    def get(self, request, *args, **kwargs):
        view = BSDisplay.as_view()
        return view(request, *args, **kwargs)
    def post(self, request, *args, **kwargs):
        view = PostEvent.as_view()
        return view(request, *args, **kwargs)

class BSDisplay(generic.DetailView):
    template_name = 'valapp/balsheet.jinja'
    model = BalanceSheet


    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        entityobject = get_object_or_404(Entity, pk=self.kwargs['pkent'])
        context['bsinfo'] = BalanceSheet.objects.filter(company = entityobject)
        return context

class EntityDetail(generic.View):
    def get(self, request, *args, **kwargs):
        view = EntityDetailDisplay.as_view()
        return view(request, *args, **kwargs)

class EntityDetailDisplay(generic.DetailView):
    model = Entity
    template_name = 'valapp/entitydetail.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        engobject = get_object_or_404(Engagement, pk=self.kwargs['pk'])
        entobject = get_object_or_404(Entity, pk=self.kwargs['pkent'])
        context['engagement'] = engobject
        context['entity'] = entobject
        return context

Код urls.py выглядит следующим образом:

app_name = 'valapp'
urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
    path('<int:pk>/', views.ValDetailView.as_view(), name='engagement'),
    path('<int:pk>/<int:pkent>/', views.EntityDetail.as_view(), name='entitydetail'),
    path('<int:pk>/<int:pkent>/bs', views.BSDetail.as_view(), name='bs'),
    path('newval/', views.newval, name="newval"),
    path('<int:pk>/newentity/', views.NewEntity.as_view(), name="newentity"),
]

Вот models.py:

class BalanceSheet(models.Model):
    company = models.ForeignKey(Entity, on_delete=models.CASCADE)
    account_type = models.CharField(max_length=50, choices = BS_ACT_CHOICES)
    value = models.DecimalField(max_digits=20, decimal_places=2)
    name = models.CharField(max_length=100)
    year = models.IntegerField(choices=YEAR_CHOICES, default=2022)
    tab_abv = models.DecimalField(max_digits=20, decimal_places=2, default=0)
    tab_rdt = models.DecimalField(max_digits=20, decimal_places=2, default=0)
    tab_debt = models.DecimalField(max_digits=20, decimal_places=2, default=0)

    def __str__(self):
        return self.name

Существуют объекты баланса, связанные с сущностью 13.

В нем есть небольшая путаница с 'pk' и 'pkent', которую я планирую убрать в будущем. В основном, каждый баланс связан с организацией, которая связана с заданием.

Когда я перехожу к val/4/13, страница загружается правильно, так что есть сущность 13 и есть множество объектов, связанных с сущностью 13 в модели BalanceSheet, которые должны загружаться.

Я признателен за любую помощь, которую вы можете оказать.

Если я не ошибаюсь, ваша структура URL <int:pk> и <int:pkent> такова, что первый pk - это Engagement, а pkent - Entity. Ваше представление BSDisplay - это DetailView, которое имеет модель BalanceSheet, однако переданный ему pk - это Engagement pk, который Django не может найти. Либо измените модель представления, либо PK, который передается в URL.

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