Django在尝试渲染视图时找不到数据库对象



当我转到/val/4/13/bs url时,收到以下错误:

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

这是视图.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"),
]

这是型号.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"one_answers"pkent",我计划在将来清理它们。基本上,每个资产负债表都与一个实体相关联,该实体与一项业务相关联。

当我转到val/4/13时,页面确实正确加载,因此有一个实体13,并且在资产负债表模型中有大量与实体13相关的对象应该加载。

如果我没有错的话,<int:pk><int:pkent>的URL结构是第一个pk是您的参与,pkent是实体。您的BSDisplay视图是一个DetailView,它有一个BalanceSheet模型,但是传递给它的pk是一个Engagement pk,Django找不到它。更改视图的模型或传递给URL的PK。

最新更新