我正试图通过访问UpdateView
来传递一个slug字段,但是当我单击该按钮时,它不会重定向或为此执行任何操作。
在处理<int:pk>
时,我习惯使用UpdateView
,但是在这种情况下,我使用的是开放源代码应用程序,该应用程序的URL均使用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
答案 0 :(得分:0)
类似于您的获取绝对网址方法,您可以如下定义获取更新网址,然后在模板中调用
def get_update_url(self):
return reverse('quiz_update', kwargs={'slug': self.url})