Skip to content

Commit f1be5c6

Browse files
committed
ticket:6 - done
1 parent 6a6e141 commit f1be5c6

4 files changed

Lines changed: 85 additions & 48 deletions

File tree

apps/basic/forms.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
from django.forms import ModelForm
1+
from django.forms import ModelForm, DateField
22

3+
from basic.widgets import CalendarWidget
34
from basic.models import Person
45

56

67
class PersonForm(ModelForm):
7-
8+
date = DateField(widget=CalendarWidget)
9+
810
class Meta:
911
model = Person

apps/basic/tests.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ def setUp(self):
1515
self.client = Client()
1616
self.user = User.objects.create_user(self.username, 'tt@tt.com', \
1717
self.password)
18-
#self.user.is_staff = True
19-
#self.user.save()
2018

2119
def login(self):
2220
login = self.client.login(username=self.username, \

apps/basic/views.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
from annoying.decorators import render_to
1+
from annoying.decorators import render_to, ajax_request
22
from django.shortcuts import redirect
33
from django.contrib.auth.decorators import login_required
4-
4+
from django.views.decorators.http import require_POST
5+
6+
from basic.widgets import CalendarWidget
57
from basic.models import Person, Location
68
from basic.forms import PersonForm
9+
710

811
@render_to('index.html')
912
def index(request):
@@ -20,20 +23,19 @@ def requests(request):
2023
@login_required
2124
@render_to('edit.html')
2225
def edit(request):
23-
if request.method == 'POST':
24-
form = PersonForm(request.POST,
25-
request.FILES, instance=Person.objects.get(pk=1))
26-
if form.is_valid():
27-
form.save()
28-
return redirect('home')
29-
else:
30-
print form.errors
31-
else:
32-
form = PersonForm(instance=Person.objects.get(pk=1))
33-
26+
form = PersonForm(instance=Person.objects.get(pk=1))
27+
calendar = CalendarWidget()
3428
return locals()
3529

3630

37-
@render_to('edit.html')
31+
@login_required
32+
@require_POST
33+
@ajax_request
3834
def save(request):
39-
return locals()
35+
form = PersonForm(request.POST, request.FILES, instance=Person.objects.get(pk=1))
36+
if form.is_valid():
37+
form.save()
38+
return {'result': 1}
39+
else:
40+
return {'result': 0, 'errors': form.errors}
41+

templates/edit.html

Lines changed: 64 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,68 @@
11
{% extends "base.html" %}
22

3+
{% block extra_head %}
4+
<style>
5+
.error{color:red;}
6+
</style>
7+
<script type="text/javascript" src="/static/js/jquery-1.10.2.js"></script>
8+
<script type="text/javascript" src="/static/js/jquery.form.js"></script>
9+
{{ calendar.media }}
10+
<script>
11+
$(function(){
12+
$('#edit_form').submit(function(e){
13+
$(this).hide()
14+
$('#ajax-loader').show()
15+
$(this).ajaxSubmit({dataType : 'json', success: function(o) {
16+
$('#ajax-loader').hide()
17+
$('#edit_form').show()
18+
$('.error, #form_state').empty()
19+
if(o.result == 1)
20+
$('#form_state').html('Person was successfully updated')
21+
else
22+
if(typeof(o.errors) != undefined)
23+
for(i in o.errors)
24+
$('#' + i + '_error').html(o.errors[i][0])
25+
}})
26+
return false;
27+
})
28+
})
29+
</script>
30+
{% endblock extra_head %}
31+
332
{% block content %}
4-
{{ form.non_field_errors }}
5-
<form method="POST" enctype="multipart/form-data" >{% csrf_token %}
6-
<div style="height:600px;">
7-
<div style="float:left;">
8-
<div>{{ form.name.errors }}</div>
9-
<p>Name: {{ form.name }}</p>
10-
<div>{{ form.surname.errors }}</div>
11-
<p>Last name: {{ form.surname }}</p>
12-
<div>{{ form.date.errors }}</div>
13-
<p>Date of bith: {{ form.date }}</p>
14-
<div>{{ form.photo.errors }}</div>
15-
<p>Photo:{{ form.photo }}</p>
16-
<div>{{ form.bio.errors }}</div>
17-
<p>Bio: {{ form.bio }}</p>
18-
</div>
19-
<div style="float:right; width:55%">
20-
<p>Contacts</p>
21-
<div>{{ form.email.errors }}</div>
22-
<p>Email: {{ form.email }}</p>
23-
<div>{{ form.skype.errors }}</div>
24-
<p>Skype: {{ form.skype }}</p>
25-
<div>{{ form.jabber.errors }}</div>
26-
<p>Jabber: {{ form.jabber }}</p>
27-
<div>{{ form.contacts.errors }}</div>
28-
<p>Other Contacts: {{ form.contacts }}</p>
29-
</div>
30-
</div>
31-
<input type="submit" value="Save" />
32-
</form>
33+
34+
<h3>42 Coffee Cups Test Assignment</h3>
35+
<div id="form_state" ></div>
36+
<div id="ajax-loader" style="display:none;">
37+
<img src="/static/images/ajax-loader.gif">
38+
</div>
39+
<form method="POST" action="{% url 'save-profile' %}" enctype="multipart/form-data" id="edit_form">
40+
{% csrf_token %}
41+
<div style="height:600px;">
42+
<div style="float:left;">
43+
<div id="name_error" class="error"></div>
44+
<p>Name: {{ form.name }}</p>
45+
<div id="surname_error" class="error" ></div>
46+
<p>Last name: {{ form.surname }}</p>
47+
<div id="date_error" class="error"></div>
48+
<p>Date of bith: {{ form.date }}</p>
49+
<div id="photo_error" class="error"></div>
50+
<p>Photo:{{ form.photo }}</p>
51+
<div id="bio_error" class="error"></div>
52+
<p>Bio: {{ form.bio }}</p>
53+
</div>
54+
<div style="float:right; width:55%">
55+
<p>Contacts</p>
56+
<div id="email_error" class="error"></div>
57+
<p>Email: {{ form.email }}</p>
58+
<div id="skype_error" class="error" ></div>
59+
<p>Skype: {{ form.skype }}</p>
60+
<div id="jabber_error" class="error" ></div>
61+
<p>Jabber: {{ form.jabber }}</p>
62+
<div id="contacts_error" class="error"></div>
63+
<p>Other Contacts: {{ form.contacts }}</p>
64+
</div>
65+
</div>
66+
<input type="submit" value="Save" />
67+
</form>
3368
{% endblock content %}

0 commit comments

Comments
 (0)