@emeraldsinner

Как в CreateView передать данные с помощью ajax?

Суть такова, пытаюсь сделать 2 селекта в форме, второй зависит от первого, тоесть в завсимости от того, что выбираем в первом, появится соответствующие варианты во втором, моя в’юха:
class SpecialPromoProductView(CreateView):
    form_class=SpecialPromoProductsForm
    template_name='products/special_promo.html'
    
    def get_form_kwargs(self, **kwargs):
        kwargs = super(SpecialPromoProductView, self).get_form_kwargs(**kwargs)
        kwargs['request'] = self.request
        return kwargs

    def get_context_data(self, *args, **kwargs):
        context = super(SpecialPromoProductView, self).get_context_data(*args, **kwargs)
        context['groups'] = GroupProducts.objects.filter(pid=None)\
                        .filter(groupproducts__in=Products.objects\
                        .filter(profile=self.request.user).values_list('group').distinct())
        context['mygroups'] = GroupProducts.objects.filter(id__in=Products.objects\
                        .filter(profile=self.request.user).values_list('group').distinct())
        return context
    
    def get_queryset(self):
        return profiles.objects.filter(groups=2)
    
    def get_success_url(self):
        return reverse_lazy('my-client')


в’юха ajax запроса:
def ajax_get_products(request):
    if request.is_ajax():
        id_product = Products.objects.filter(profile=request.user).filter(group=GroupProducts.objects.get(id=request.GET.get('group_choice')))
    return render_to_response('products/special_promo.html', locals())


шаблон:
{% extends "header.html" %}
{% load staticfiles %}

{% block body_block %}
<form action="" method="get">
            {% csrf_token %}
            {{ form.client.label }}<br>
            {{ form.client }}<br>
            <label for="group">Group</label><br>
            <select name="group" id="group_choice" onchange="get_products();">
            	{% for pgroup in groups %}
            		<optgroup label="{{pgroup}}">
            			{% for group in pgroup.groupproducts_set.all %}
            				{% if group in mygroups %}
            					<option value="{{group.id}}">{{group}}</option>
            				{% endif %}
            			{% endfor %}
            		</optgroup>
            	{% endfor %}
            </select><br>
            {{ form.product.label }}<br>
            {{ form.product }}<br>
            {{ form.cost.label }}<br>
            {{ form.cost }}<br>
            <input type="submit" value="Зберегти" />
        </form>
{%endblock%}


{% block body_js%}
<script src="{% static "js/prototype.js" %}"></script>
<script>
	function get_products(){
	    new Ajax.Request('/ajax_get_products/', { 
	    method: 'get',
	    parameters: $H({'group_choice':document.getElementById('group_choice').value}),
	    onSuccess: function(transport) {
	        var e = document.getElementById('id_product')
	        if(transport.responseText)
	            e.update(transport.responseText)
	    }
	    }); // end new Ajax.Request
	}
</script>
{% endblock %}


и урлы:
url(r'^special_promo_for_client/$', special_promo, name='add-special-promo'),
url(r'^ajax_get_products/$', 'main_sid.products.views.ajax_get_products'),

Проблема собственно в чем: в ajax запросе queryset выполняется нормально, но при return render_to_response(... дает ошибку
NoReverseMatch: NoRevers...+)/$']",)

Делал такое же в TemplateView, там все работало нормально, тут беда такая вот, может кто подскажет в чем проблема? Спасибо.
  • Вопрос задан
  • 411 просмотров
Пригласить эксперта
Ответы на вопрос 1
crazyzubr
@crazyzubr
Python backend-developer
Как минимум нужно передавать еще RequestContext

render_to_response('products/special_promo.html', locals(), context_instance=RequestContext(request))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы