Я прочитал документ django, я знаю, что у django есть get_next_by_foo, где foo - это datetime, а не null = True. Я создал в модели 2 функцию get_previous и get_next, но когда я вызываю ее в html-файле, я ничего не показываю В моей модели.py
class Contracts(models.Model):
id=models.AutoField(primary_key=True)
contract=models.CharField(max_length=255,blank=True, null=True)
name=models.CharField(max_length=255,blank=True, null=True)
debt=models.IntegerField(blank=True, null=True)
created_at=models.DateTimeField(auto_now_add=True)
updated_at=models.DateTimeField(auto_now_add=True,blank=True)
objects=models.Manager()
class Meta:
ordering=["-created_at"]
def get_absolute_url(self):
return "/contract_detail/%s/" % self.contract
на мой взгляд.html
def next_back(request, id=None):
queryset = get_object_or_404(Contracts, id=contract)
the_next = queryset.get_next_by_created_at()
the_prev= queryset.get_previous_by_created_at()
context = {
"title": queryset.title,
"instance": queryset,
"the_next" : the_next,
"the_prev": the_prev,
}
return render(request, "contract_detail.html", context)
def contract_detail(request, pk):
queryset = Contracts.objects.get(contract=pk)
context = {
"queryset": queryset,
}
return render(request, "contract_detail.html", context)
в моем url.py
urlpatterns = [
path('admin/', admin.site.urls),
path('demo',views.showDemoPage),
#path("",views.home, name='home'),
path('customer/', views.index, name='index'),
path('customer1/', views.list_contract, name='list_contract'),
path('add_items/', views.add_items, name='add_items'),
path('search/', views.searchcontract, name='search'),
path('contract_detail/<str:pk>/', views.contract_detail, name = "contract_detail"),
url(r'^export/csv/$', views.export_search_csv, name='export_search_csv'),
и в моем contract_detail.html
<a href = "{{ the_next.get_absolute_url }}">Next</a>
<a href = "{{ the_prev.get_absolute_url }}">Previous</a>
Я неправильно понимаю его концепцию? Если да, то как я могу с этим справиться? Заранее спасибо!
Я просто редактирую свой вопрос. Я думаю, что это проблема, но я не знаю, как это исправить. Это мой первый проект в джанго и я еще новичок
Измените свои URL-адреса, представления и шаблоны.
....
path('contract_detail/<str:contract_id>/', views.contract_detail, name = "contract_detail"),
....
def contract_detail(request, contract_id=None):
contract = get_object_or_404(Contracts, contract=contract_id)
the_next = contract.get_next_by_created_at()
the_prev = contract.get_previous_by_created_at()
context = {
"contract": contract,
"the_next" : the_next,
"the_prev": the_prev,
}
return render(request, "contract_detail.html", context)
В шаблоне вы можете использовать переменную contract
для доступа к экземпляру. Вы получаете один экземпляр модели. Поэтому называть его queryset
не имеет никакого смысла.
В шаблоне вы используете шаблон URL
contract_detail
для следующей и предыдущей ссылок. Но вы определили логику для получения следующего и предыдущего объектов в представленииnext_back
, которое не сопоставлено ни с одним шаблоном URL. Это может быть путаница, я думаю. Разместите код для просмотраcontract_detail
. Это может помочь.