【发布时间】:2019-07-17 18:14:18
【问题描述】:
我想在 UpdateView 中发送一条成功消息,其中包含允许用户改变对更新的想法的链接。这意味着我需要主键。
我无法确定如何在 UpdateView 中检索主键。其他一切都正常,所以你会在我的代码中看到,我暂时将主键硬编码为 434。
我对所有编程都是一个极端的新手,所以我相信这里有一些愚蠢的东西。我试着一次减少一点我愚蠢的东西。因此,我主要想专注于如何检索 PK(或 ID)。谢谢。
网址:
# CLASS BASED VIEWS #
path('event/list', EventListView.as_view(), name='list'),
path('event/detail/<int:pk>', EventDetailView.as_view(), name='detail'),
path('event/create', EventCreateView.as_view(), name='create'),
path('event/update/<int:pk>', EventUpdateView.as_view(), name='update'),
观点:
class EventUpdateView(SuccessMessageMixin,UpdateView):
template_name = 'update.html'
form_class = EventForm
success_url = '../list'
queryset = Event.objects.all()
def get_object(self, queryset=None): # here we override the get_object method in UpdateView, don't need queryset
#obj = Event.objects.get(id=self.kwargs['pk'])
pk_=self.kwargs.get("pk")
print("The pk is", pk_)
return get_object_or_404(Event,pk=pk_)
def form_valid(self, form):
return super().form_valid(form)
message_part_1 = "Record has been updated <a href='unupdate?recordtobeunupdated="
message_part_2 = '434'
message_part_3 = "'>Undo</a>"
undo_message = message_part_1 + message_part_2 + message_part_3
success_message = (mark_safe(undo_message))
模特:
from django.db import models
from django.urls import reverse
class Event(models.Model): # This is our database table
company = models.CharField(default='UL', max_length=20)
engine = models.CharField(blank=True, max_length=15)
date = models.DateTimeField(default=datetime.now, blank=True, null=True) # default the date to today
category = models.CharField(max_length=20, choices=CATEGORY_CHOICES, default='Weights')
description = models.TextField(blank=True, null=True)
reason = models.TextField(blank=True, null=True)
assess_date = models.DateTimeField(null=True, blank=True)
outcome = models.CharField(blank=True, max_length=200)
# the default is True, it can't be blank
visible = models.BooleanField(default=True, blank=False)
def get_absolute_url(self):
return reverse("SiteEventsAPP: SiteEventsAPP-detail", kwargs={"pk": self.pk})
# See below __str__(self) is a special method
# It does a cool thing
# Whenever Python asks for a string representation of my Event object, this method returns a human-readable version
# If there is no string method, then Python returns the object type
# This class method is really only needed for the admin page
def __str__(self):
return self.engine # I have to have a field here. Whatever field I pick will be the field shown in admin
【问题讨论】:
-
你打算用这个success_message做什么?它不是任何基于类的内置视图的标准属性。
-
丹尼尔,我在上面加了一个sn-p给你看。 “撤消”是需要PK的。但如果你有更好的主意,我很感兴趣。
-
是的,但是您打算如何将该消息从班级获取到模板?
-
(另外,它不会影响您的问题,但请注意您的
get_object方法是不必要的 - 它只是执行默认实现已经执行的操作。仅当您需要覆盖get_object想做一些不寻常的事情。你应该删除你的版本。) -
好的就行。这是一次检索 PK 的尝试,但失败了。
标签: python django django-class-based-views