Django - 防止CreateView被调用两次

时间:2016-07-19 20:34:18

标签: python django django-views

我需要做的是从两个不同的页面访问相同的CreateView。这两个页面中的一个将发送一些数据,这些数据将通过get_initial()插入到CreateView表单中。我用来访问视图的按钮是发送一些POST数据,因此CreateView立即认为一切都成功并一直到get_success_url()然后重新路由。以下是我所拥有的。我不确定实现我想要的最优雅的方式。如果可能的话,我试图避免任何GET数据(使URL变得混乱)?这是一种在初始化时将POST数据发送到CreateView的优雅方法吗?

template.html



            <form method="POST" action="{% url 'purification:add' %}">
    {% csrf_token %}
    <input type="hidden" name="sample_id" value="{{ sample_data.id }}">
    <button class="btn btn-success" id="add-purification-button" role="button" type="submit">+Add Purification</button>
</form>
&#13;
&#13;
&#13;

view.py

class PurificationCreateView(LoginRequiredMixin, CreateView):
    model = Purification
    template_name = "add_purification.html"
    fields = "__all__"

    def get_initial(self):
        if self.request.POST.get('sample_id'):
            sample = Samples.objects.get(pk=self.request.POST['sample_id'])
            return {'sample': sample}

        return None

    def get_success_url(self):
        if "save-and-add-another" in self.request.POST:
            return reverse('purification:add')
        else:
            return reverse('samples:oneSample', kwargs={'sample_id': self.request.POST['sample']})

0 个答案:

没有答案