jquery - django ajax form onchange select -
i have models, forms , views. need ajax form request, when room selected change room information. tried ajax doesn't work. use jquery.
<script type="text/javascript"> $(document).ready(function(){ $('#roomform').change(function() { request_url = '/hotel/rooms-view/' + pk + '/'; $.ajax({ url: request_url, success: function(data){ $('#id_room').html('<option selected="' + "selected" + '">' + '' +'</option>'); for(var = 1; i<=data[1]; i++) $('#id_room').append('<option value="' + + '">' + +'</option>'); }, errors: function(e) { alert(e); } }) }) </script>
template
<form class="form-inline reservation-horizontal clearfix" role="form" method="post" action="" name="reservationform" id="bookingform">{% csrf_token %} <div class="row"> <div class="form-group room"> <label for="room">{% trans 'room type' %}</label> <select class="form-control" name="room" id="room"> <option value={{form.room}}</option> </select> </div> <div class="form-group"> <label for="from_date">{% trans 'checkin' %}</label></div> <input name="from_date" type="text" id="from_date" value="" class="form-control"/> </div> <div class="form-group"> <label for="to_date">{% trans 'checkout' %}</label> <input name="to_date" type="text" id="to_date" value="" class="form-control"/></div> <button type="submit" id="book" class="btn btn-primary btn-block"> book</button> </form>
models.py
class room(models.model): status = models.booleanfield('status',default=true) name = models.charfield('name', max_length=100, unique=true) class book(models.model): date = models.datetimefield('created',auto_now_add=true) from_date = models.datefield('check-in') to_date = models.datefield('check-out') room = models.foreignkey(room, related_name='booking')
forms.py
class bookform(forms.modelform): from_date = forms.datefield(label='check-in') to_date = forms.datefield(label='check-out') adult = forms.integerfield(label='adult') room = forms.modelchoicefield(queryset=room.objects.filter(status=true),widget=form.select(attrs={'onchange':'refresh();'})) fname = forms.charfield(label='last name') lname = forms.charfield(label='first name') email = forms.emailfield(label='email') phone = forms.integerfield(label='phone') message = forms.textarea()
views.py # update
def room_detail(request,pk): room = get_object_or_404(room,pk=pk) if request.method == 'post': form = bookform(request.post,room=room) if form.is_valid(): s = form.save(commit=true) s.save() return redirect(request.path) else: form = bookform() rooms = room.objects.get(id=pk) start_dates = rooms.booking.values_list('from_date',flat=true) end_dates = rooms.booking.values_list('to_date',flat=true) dates = [start + timedelta(days=i) start, end in zip(start_dates,end_dates) in range((end-start).days+1)] c = {} c['form'] = form return render_to_response('rooms_detail.html',c)
please me, in advance.
you should specify type of ajax request ... if want post request view, add after $.ajax({ type: 'post',
from django docs
class jsonresponsemixin(object): def render_to_response(self, context): return self.get_json_response(self.convert_context_to_json(context)) def get_json_response(self, content, **httpresponse_kwargs): return httpresponse( content, content_type='application/json', ) def convert_context_to_json(self, context): return json.dumps(context) class someajaxview(view, jsonresponsemixin): model = room @method_decorator(require_ajax) @method_decorator(require_post) def dispatch(self, request, *args, **kwargs): obj_pk = request.post.get('room_pk') self.object = get_object_or_404(self.model, pk=obj_pk) return super(someajaxview, self).dispatch(request, *args, **kwargs) def post(self, request, *args, **kwargs): self.object.status = request.post.get('status') self.object.name = request.post.get('name') # same way can change self.object.booking self.object.save() context = { 'result': 'success', } return self.render_to_response(context)
Comments
Post a Comment