如何将子弹传递给UpdateView?

时间:2019-11-13 03:19:15

标签: django python-3.x

我正试图通过访问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

1 个答案:

答案 0 :(得分:0)

类似于您的获取绝对网址方法,您可以如下定义获取更新网址,然后在模板中调用

def get_update_url(self):
    return reverse('quiz_update', kwargs={'slug': self.url})