Как правильно отобразить форму Django с помощью ListView
Я пишу простое приложение для отслеживания лидов продаж, основываясь на учебнике Django "Writing your first Django app" (https://docs.djangoproject.com/en/4.0/intro/tutorial01/). Все работает хорошо, за исключением отображения ListView существующих предложений.
Вот соответствующие фрагменты python:
# leads/models.py
class Leads(models.Model):
id = models.IntegerField(primary_key=True)
last = models.CharField(max_length=32)
first = models.CharField(max_length=32)
# config/urls.py
urlpatterns = [
# Django admin
path('admin/', admin.site.urls),
# User management
path('accounts/', include('allauth.urls')),
# Local apps
path('leads/', include('leads.urls'))
# leads/urls.py
app_name = 'leads'
urlpatterns = [
path('', LeadsListView.as_view(), name='list'),
path('<int:pk>/', LeadsDetailView.as_view(), name='detail'),
]
# leads/views.py
class LeadsListView(ListView):
model = Leads
template_name = 'leads/list.html'
context_object_name = 'leads_list'
def get_queryset(self):
return Leads.objects.order_by('id')
class LeadsDetailView(DetailView):
model = Leads
template_name = 'leads/detail.html'
Ссылка в шаблоне 'home.html', которая правильно отображает пункт меню:
<a href="{% url 'leads:list' %}">Leads</a>
И, наконец, шаблон 'list.html', который вообще не отображается. Вместо того чтобы показать список лидов, он остается на главной странице.
{% block content %}
{% for lead in lead_list %}
<div class="lead-entry">
<h2><a href="{% url 'leads:detail' lead.pk %}">{{ lead.fname }} {{ lead.lname }}</a></h2>
</div>
{% endfor %}
{% endblock content %}
Я упускаю что-то фундаментальное здесь....
Есть некоторые незначительные ошибки, такие как:
Выпуск
context_object_name='leads_list, и вы определили в своем файле шаблона какlead_list, пропустилиs.Имя вашего поля Model -
firstиlast, а неfnameиlname.
Решение:
Попробуйте сделать это в своем шаблоне:
{% block content %}
{% for lead in leads_list %}
<div class="lead-entry">
<h2><a href="{% url 'leads:detail' lead.pk %}">{{ lead.first }} {{ lead.last }}</a></h2>
</div>
{% endfor %}
{% endblock content %}
Я изменил lead.fname на lead.first и lead.lname на lead.last, а также добавил s к lead_list, теперь это leads_list.
Note:Модели в django не требуют имени во множественном числе, будет лучше, если вы дадите имя модели толькоLead, а неLeads, так как django сам добавляетsв качестве суффикса.
Note:If you are overriding the defaultAutoFieldgenerated by django which isid, so you must override it withAutoField[django-doc] rather than makingIntegerFieldprimary key.