2013-09-02 2 views
2

У меня есть форма, которая использует переадресацию для создания записи, когда пользователь нажимает кнопку. Это отлично работает, когда передается только один аргумент. Тем не менее, сейчас я хотел бы сделать это на основе двух параметров configuration_pk и type_pk и он возвращает ошибку:Как передать несколько аргументов url в RedirectView?

Reverse for 'new_conf_cert' with arguments '()' and keyword arguments '{u'type_pk': 1, u'configuration_pk': 2}' not found.

Шаблон сниппет вызова это:

<div id="menu"> 
<a><img width="56pt" src="/static/icon-calibrate.svg"></a><br /> 
    <div style="display: none"> 
{% for type in object.typelist %} 
    <form action="{% url 'new_conf_cert' configuration_pk=object.id type_pk=type.id %}" method="post" onsubmit="return confirm('Are you sure you want to calibrate all instruments in the {{object}} configuration?')">{% csrf_token %} 
    <input type="submit" value="Calibrate {{type}}s" /> 
</form> 
    {% endfor %} 
    </div> 
</div> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
<script type="text/javascript"> 
$('#menu > a').click(function(){ 
    $(this).next().next().slideToggle(); 
    return false; 
}); 
</script> 

Соответствующая строка в URLconf является
url(r'^add/conf_certificate/(?P<configuration_pk>)/(?P<type_pk>\d+)/$', 'Tank.views.new_conf_cert', name='new_conf_cert'),

И views.py секция выглядит следующим образом:

class AddConfigurationCertificateView(RedirectView): 
    http_method_names = ['post'] 

    def get_redirect_url(self, *args, **kwargs): 
     url = '/Tank/configurations/%s/' % self.kwargs['configuration_pk'] 
     return url 

    def post(self, request, *args, **kwargs): 
     conf = Configuration.objects.get(id=self.kwargs['configuration_pk']) 
     caltype = InstrumentType.objects.get(id=self.kwargs['type_pk']) 
     for inst in conf.instruments.all(): 
      if inst.kind == caltype: 
       CalibrationCertificate.objects.create(instrument=inst, 
                 expires=timezone.now()+timedelta(days=inst.kind.duration), 
                 issued=timezone.now(), 
                 issued_by=request.user) 
     return super(AddConfigurationCertificateView, self).post(request, *args, **kwargs) 

new_conf_cert = AddConfigurationCertificateView.as_view() 
+0

Вы уверены, что ваш URLconf правильно? Это должно быть 'url (r '^ add/conf_certificate/(? P \ d +)/(? P \ d +)/$', 'Tank.views.new_conf_cert', name = 'new_conf_cert')' (Обратите внимание на '\ d +' после 'configuration_pk') – Germano

+0

Ах да, вот и все. Большое спасибо. –

+0

Хорошо, я отправлю его в качестве ответа, чтобы вы могли принять его тогда :) – Germano

ответ

2

Вы должны исправить регулярное выражение в urlconf:

url(r'^add/conf_certificate/(?P<configuration_pk>\d+)/(?P<type_pk>\d+)/$', 'Tank.views.new_conf_cert', name='new_conf_cert') 
Смежные вопросы