我需要做的是从两个不同的页面访问相同的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;
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']})