Почему я не могу напечатать выбранный экземпляр модели в Django? - PullRequest
0 голосов
/ 04 марта 2019

Просто небольшая предыстория: я новичок в Python / Django, но у меня есть рабочее приложение, которое я сделал в нем, которое я пытаюсь реструктурировать, чтобы я мог в полной мере использовать всю мощь моделей Django.В настоящее время у меня есть модель выбора, которую пользователь выбирает из раскрывающегося списка, после чего они перенаправляются на страницу успеха.В конце концов, скрипт будет выполняться на основе их выбора.На странице успеха я хочу отобразить их текущий выбор в качестве «подтверждения» того, над чем они выполняли сценарий.

После тщательного исследования я собрал своего рода направление, в котором мне нужно идти,но у меня возникли проблемы с реализацией, из-за чего я могу поверить, что мне может не хватать фундаментальных знаний о настройке модели, поэтому некоторые пояснения были бы хорошими.

В любом случае, я хочу использовать поле get_device_display в шаблоне, чтобы сделатьэтот.Однако всякий раз, когда я пытаюсь это реализовать, это не работает.Я вижу, что некоторые люди используют для этого собственные менеджеры моделей, нужно ли это как-то реализовывать?Или, может быть, сделать другую форму / TemplateView при отображении страницы успеха?Вот мой код:

modles.py

from django.db import models

class DeviceChoice(models.Model):
    DEVICE_NAMES = (
    ('1', 'Haha123-9400-5'),
    ('2', 'Cisco-4506-1'),
    ('3', 'Test-3850-3'),
    ('4', 'Hello-2960C-1'),
    ('5', 'Router-9850-1'),
    ('6', 'Switch-2900-4'),
)

    device = models.CharField(max_length=20, choices=DEVICE_NAMES)
    objects = models.Manager()

views.py

def success(request):
        return render(request, 'success.html')

class SuccessView(TemplateView):
        template_name = "success.html"

class DeviceChoiceView(CreateView):
        model = DeviceChoice
        form_class = DeviceChoiceForm
        success_url = reverse_lazy('success')
        template_name = 'index.html'

success.html

<!DOCTYPE html>
<html>
    <head>
        <title>Port Reset</title>
    </head>
    <body>
        <h1>Success!!</h1>
        <!--Not sure how to implement below this line-->
        {{ deviceSelection.get_device_display }}
    </body>

Спасибо за внимание,Как я уже сказал, я понимаю, что мне не хватает чего-то фундаментального в моделях, но я не могу понять, что это может быть.

РЕДАКТИРОВАТЬ: Добавил еще немного кода.index.html (для отправки deviceSelection)

<!DOCTYPE html>
<html>
    <head>
        <title>Port Reset</title>
    </head>
    <body>
        <h1>Device Database</h1>
         <form action="" method="post"> 
                {% csrf_token %}
                {{ form.as_p }}
         <input type="submit" id="deviceSelection" value="Submit">
        </form>
    </body>

forms.py

from django import forms
from port_reset.models import DeviceChoice

class DeviceChoiceForm(forms.ModelForm):
    class Meta:
        model = DeviceChoice
        fields = ['device']

EDIT 2:

Вот что я пытался сделать для моего views.py:

class SuccessView(DetailView):
        model = DeviceChoice
        template_name = "success.html"
        queryset = DeviceChoice.objects.all()

class DeviceChoiceView(CreateView):
        model = DeviceChoice
        form_class = DeviceChoiceForm
        #success_url = reverse_lazy('success')
        template_name = 'index.html'

        def get_success_url(self):
                return reverse_lazy('success', kwargs={'deviceSelection': self.deviceSelction})

urls.py

   urlpatterns = [
        path('', DeviceChoiceView.as_view(), name='index'),
        path('success/<int:deviceSelection>', SuccessView.as_view, name="success")

1 Ответ

0 голосов
/ 05 марта 2019

Это не проблема с полем выбора или методом отображения.Проблема в том, что вы не предоставляете никакого контекста шаблону в SuccessView;просто нет устройства для отображения, и deviceSelection не определено.

Вам необходимо использовать DetailView с URL-адресом, который содержит параметр, идентифицирующий идентификатор устройства, которое вы хотите показать.Затем в представлении создания необходимо перенаправить на этот URL, переопределив метод get_succress_url.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...