Как правильно отобразить форму 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 %}

Я упускаю что-то фундаментальное здесь....

Есть некоторые незначительные ошибки, такие как:

Выпуск

  1. context_object_name='leads_list, и вы определили в своем файле шаблона как lead_list, пропустили s.

  2. Имя вашего поля 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 default AutoField generated by django which is id, so you must override it with AutoField[django-doc] rather than making IntegerField primary key.

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