Как просматривать элементы в базе данных, выбранные пользователем в приложении Django?

#python #django #django-rest-framework #django-views

#python #django #django-rest-framework #django-просмотры

Вопрос:

У меня есть модель orders , которая хранит заказы пользователей в ресторане. Я хочу создать представление, которое позволит мне отображать каждый элемент, доступный в базе данных, на домашней странице в виде сетки.

  • Затем, когда пользователь нажимает на любой из элементов, он должен перевести их на новую страницу с дополнительной информацией об элементе. Как бы я установил логику для представления, чтобы узнать, какой элемент пользователь нажал?

Комментарии:

1. Вы пробовали какой-либо код?

2. Добро пожаловать в Stack Overflow. Мы здесь работаем не так. Мы ожидаем, что вы расскажете и покажете нам, что вы пробовали, а затем мы поможем вам с конкретными проблемами. Мы не решаем домашние задания.

Ответ №1:

Хорошо, поэтому я бы рекомендовал вам использовать представления на основе классов. Такие, как ListView и DetailView, будут соответствовать вашему варианту использования.

https://docs.djangoproject.com/en/3.1/topics/class-based-views/generic-display/#making-friendly-template-contexts

A views.py с Listview будет выглядеть так:

     from django.views.generic import ListView, DetailView
    from .models import Items
    
    class ItemsList(ListView):
        model = Items
        context_object_name = 'items_list'
        template_name = "menu/index.html" # Location of the template


    class ItemDetailList(DetailView):
        model = Items
        context_object_name = 'item'
        template_name = "menu/item.html" # Location of the template
 

urls.py В той же папке приложения не забудьте включить его в project urls.py

из django.urls путь импорта

 from .views import ItemsList, ItemDetailList
urlpatterns = [
  path("", ItemsList.as_view(), name="menu"),
  path("item/<int:pk>/", ItemDetailList.as_view(), name="item_detail"),
]
 

В шаблоне вы бы ссылались на объект, используя context_object_name, который в случае представления списка будет items_list

В пути для подробного представления с <int:pk> помощью вы передаете первичный ключ объекта, на который ссылаетесь, а затем ссылаетесь на него в своем шаблоне, который покажет вам информацию об элементе