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.