Python 为什么可以';我不能在Django中打印一个choice模型实例吗?

Python 为什么可以';我不能在Django中打印一个choice模型实例吗?,python,django,Python,Django,只是一个小背景:我对Python/Django还不熟悉,但我在其中制作了一个可以工作的应用程序,我正在尝试对其进行重组,以便能够充分利用Django模型的功能。我目前有一个选择模型,用户可以从下拉列表中选择,然后重定向到成功页面。最终,将根据他们的选择执行脚本。在成功页面上,我想显示他们当前的选择,作为他们执行脚本的“确认” 在研究了一段时间后,我收集了一些我需要走的方向,但在实现中遇到了一些问题,这让我相信我可能对模型设置缺乏一些基本的理解,所以一些澄清会很好 无论如何,我想在模板中使用get

只是一个小背景:我对Python/Django还不熟悉,但我在其中制作了一个可以工作的应用程序,我正在尝试对其进行重组,以便能够充分利用Django模型的功能。我目前有一个选择模型,用户可以从下拉列表中选择,然后重定向到成功页面。最终,将根据他们的选择执行脚本。在成功页面上,我想显示他们当前的选择,作为他们执行脚本的“确认”

在研究了一段时间后,我收集了一些我需要走的方向,但在实现中遇到了一些问题,这让我相信我可能对模型设置缺乏一些基本的理解,所以一些澄清会很好

无论如何,我想在模板中使用get_device_display字段来实现这一点。然而,每当我尝试实现它时,它都不起作用。我看到有些人为此使用自定义模型管理器,我是否需要以某种方式实现它?或者在显示成功页面时创建另一个表单/模板视图?这是我的密码:

模版

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>
编辑2:

以下是我为我的视图所做的尝试。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})
url.py

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

选择字段或显示方法根本没有问题。问题是您没有在SuccessView中为模板提供任何上下文;根本没有要显示的设备,
deviceSelection
未定义


您需要使用DetailView,其URL包含标识要显示的设备id的参数。然后,在创建视图中,您需要通过覆盖
get\u success\u URL
方法重定向到该URL。

请添加更多代码,但不确定deviceSelection来自何处。如果您试图显示dedeviceChoice对象的缺点您应该能够在模板中使用deviceChoice.device。但我认为这不是您要添加的内容。更多代码将帮助我们帮助您here@TheodoreHowell我还为您添加了一些。因此,deviceSelection只是一个ID名称,用于索引模板中表单中用户的输入我只是在胡闹,看看这是否能让它工作,但遗憾的是它没有。我试着重命名为“devicechoice.device.get_device.display”但这也不起作用。好吧,我正在尝试你所说的。如果你看到我在上面的第二次编辑,这是否在正确的轨道上?再次感谢你,但你应该看到一个错误。DetailView需要一个包含ID的url模式,所以要么你会在上面得到一个错误,要么你会在get_success_url中得到一个错误在那里的反向调用中不要提供ID。另外,在SuccessView中,您的
get\u object
方法被破坏,因为它实际上不调用get\u object\u或\u 404;但是请注意,您根本不需要该方法,因为DetailView将为您执行此操作,您应该删除它。最后,您需要将success.html模板更改为
{{object.get\u device\u display}
。再次感谢。我更新了我的“编辑2”显示我在阅读您的评论后所做的更改。我认为我现在的一个问题是定义ID,并将其传递给DetailView。我尝试查看此处的文档,但仍然有点困惑。如果您认为这对于这个问题来说太离题了,我可以打开另一个。文档:您没有任何调用<在createview中,code>self.deviceSelection。您需要在反向调用中使用
self.object.pk
。类似地,成功的URL模式需要有
,以便detailview可以选择它。
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})
   urlpatterns = [
        path('', DeviceChoiceView.as_view(), name='index'),
        path('success/<int:deviceSelection>', SuccessView.as_view, name="success")