在Django View中按下按钮时自动添加记录

时间:2013-08-15 10:11:18

标签: django forms django-views

在我的数据库中,Instrument个对象可以包含许多CalibrationCertificate个对象,这些对象仅包含Instrument的ForeignKey,发布日期和日期已过期。这两个日期都是自动计算的,无需用户输入。因此,有没有办法可以在Instrument_Detail视图上放置一个按钮,该按钮会向数据库添加新的CalibrationCertificate记录,并将instrument字段设置为当前对象?

1 个答案:

答案 0 :(得分:0)

这是恕我直言的最佳解决方案。要在重定向视图中自定义网址,请使用get_redirect_url。

views.py

class AddCalibrationCertificateView(RedirectView):
    http_method_names = ['post']
    url = '/instrument/1/'

    def post(self, request, *args, **kwargs):
        '''Here you add new certificate object, use self.kwargs['instrument_pk']
           to get related instrument
        '''
        return super(AddCalibrationCertificateView, self).post(request, *args, **kwargs)

new_cert = AddCalibrationCertificateView.as_view()

urls.py

url(r'^add/certificate/(?P<instrument_pk>\d+)/$', 'views.new_cert', name='new_cert'),

instrument.html

<form action="{% url 'new_cert' 1 %}" method="post">{% csrf_token %}
    <input type="submit" value="Add cert" />
</form>