django - 如何将 slug 传递给 UpdateView?
问题描述
我试图让一个 slug 字段通过访问一个UpdateView
但是当我单击按钮时它不会重定向或为此做任何事情。
我习惯于使用<int:pk>
while 处理UpdateView
s,但在这种情况下,我使用的是一个开源应用程序,它使用一个 slug 字段作为它的 URL。
网址:
url(r'^(?P<slug>[\w-]+)/update/$',
view=QuizUpdateView.as_view(),
name='quiz_update'),
模型属性和方法:
url = models.SlugField(
max_length=60,
blank=False
)
def get_absolute_url(self):
return reverse('quiz_detail', kwargs={'pk': self.pk, 'slug': self.url})
模板:
<button class="btn btn-default btn-sm" onclick="location.href='{% url 'quiz_update' slug=quiz.url %}">Update Test</button>
看法:
class QuizUpdateView(LoginRequiredMixin, UserPassesTestMixin, SuccessMessageMixin, UpdateView):
"""
Display a form for updating a quiz
**Context**
``quiz``
An instance of :model:`quiz.Quiz`
**Template:**
:template:`quiz/<slug>/update/`
"""
model = Quiz
fields = [
'title',
'description',
'receiver',
'url',
'category',
'max_questions',
'random_order',
'answers_at_end',
'exam_paper',
'single_attempt',
'pass_mark',
'success_text',
'fail_text',
'draft',
]
success_message = 'Quiz successfully updated!'
def test_func(self):
quiz = self.get_object()
print(self.request.user.employee_type)
print(quiz.receiver)
if self.request.user.employee_type in quiz.receiver:
return True
return False
解决方案
类似于您的获取绝对网址方法,您可以如下定义获取更新网址并在模板中调用它
def get_update_url(self):
return reverse('quiz_update', kwargs={'slug': self.url})
推荐阅读
- wordpress - 如何使用多个变量更改 WooCommerce 中的“选择选项”文本
- git - Semantic-Release - 预发布版本不增加补丁、次要或主要版本
- r - 如何在 dplyr 中获取 case_when 接受字符的条件
- amazon-web-services - 是否可以为文件建立 AWS CodeCommit 策略?
- swift - 使用 Swift 获取已安装应用程序的特定信息
- c# - Newtonsoft JSON反序列化问题
- pipeline - 如何自动刷新大三角帆管道的控制台输出
- python - 如何获取多个图像的轮廓区域并在数据框中分离
- google-apps-script - /auth/classroom.topics.readonly 是敏感范围吗?
- excel - 从另一个工作簿隐藏工作表