it's work OK But When I want improve it and add ImageField in Category
Model i have problem with ImageField It's Not uploaded
file = models.ImageField(upload_to='img/%Y')
see code please :
_____
views.py
_____
from django import forms
class CategoryForm(forms.ModelForm):
class Meta:
model = Category
def add_category(request):
if request.method == "POST":
form = CategoryForm(request.POST, request.FILES)
## Handle AJAX ##
if request.is_ajax():
if form.is_valid():
form.save()
# Get a list of Categories to return
cats = Category.objects.all().order_by('name')
# Create a dictionary for our response data
data = {
'error': False,
'message': 'Category %s Added Successfully' %
form.cleaned_data['name'],
# Pass a list of the 'name' attribute from each
Category.
# Django model instances are not serializable
'categories': [c.name for c in cats],
}
else:
# Form was not valid, get the errors from the form and
# create a dictionary for our error response.
data = {
'error': True,
'message': "Please try again! one",
'name_error': str(form.errors.get('name', '')),
'slug_error': str(form.errors.get('slug', '')),
'file_error': str(form.errors.get('file', '')),
}
# encode the data as a json object and return it
return http.HttpResponse(json.dumps(data))
## Old Form Handler Logic ##
if form.is_valid():
form.save()
return http.HttpResponseRedirect('/category/')
else:
form = CategoryForm()
cats = Category.objects.all().order_by('name')
context = Context({'title': 'Add Category', 'form': form,
'categories': cats})
return render_to_response('ajax_form.html',
context,context_instance=RequestContext(request))
___________
ajax_form.html
___________
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>{{ title }}</title>
<style>
#message {width:250px; background-color:#aaa;}
.hide {display: none;}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/
libs/jquery/1.3.2/jquery.js"></script>
</head>
<body>
<script type="text/javascript">
// prepare the form when the DOM is ready
$(document).ready(function() {
$("#add_cat").ajaxStart(function() {
// Remove any errors/messages and fade the form.
$(".form_row").removeClass('errors');
$(".form_row_errors").html('');
$("#add_cat").fadeTo('slow', 0.33);
$("#add_cat_btn").attr('disabled', 'disabled');
$("#message").addClass('hide');
});
// Submit the form with ajax.
$("#add_cat").submit(function(){
$.post(
// Grab the action url from the form.
"#add_cat.getAttribute('action')",
// Serialize the form data to send.
$("#add_cat").serialize(),
// Callback function to handle the response from view.
function(resp, testStatus) {
if (resp.error) {
// check for field errors
if (resp.name_error != '') {
$("#name_row").addClass('errors');
$("#name_errors").html(resp.name_error);
}
if (resp.slug_error != '') {
$("#slug_row").addClass('errors');
$("#slug_errors").html(resp.slug_error);
}
if (resp.file_error != '') {
$("#file_row").addClass('errors');
$("#file_errors").html(resp.file_error);
}
} else {
// No errors. Rewrite the category list.
$("#categories").fadeTo('fast', 0);
var text = new String();
for(i=0; i<resp.categories.length ;i++){
var m = resp.categories[i]
text += "<li>" + m + "</li>"
}
$("#categories").html(text);
$("#categories").fadeTo('slow', 1);
$("#id_name").attr('value', '');
$("#id_slug").attr('value', '');
$("#id_file").attr('value', '');
}
// Always show the message and re-enable the form.
$("#message").html(resp.message);
$("#message").removeClass('hide');
$("#add_cat").fadeTo('slow', 1);
$("#add_cat_btn").attr('disabled', '');
// Set the Return data type to "json".
}, "json");
return false;
});
});
</script>
<h1>{{ title }}</h1>
<div id='message'></div>
<form id="add_cat" method="post" action="." enctype="multipart/
form-data">
{% csrf_token %}
<div class='form_row' id='name_row'>
<p id='name_errors' class="form_row_errors">{% if
form.name.errors %}{{ form.name.errors }}{% endif %}</p>
{{ form.name.label_tag }}{{ form.name }}
</div>
<div class='form_row' id='slug_row'>
<p id='slug_errors' class="form_row_errors">{% if
form.slug.errors %}{{ form.slug.errors }}{% endif %}</p>
{{ form.slug.label_tag }}{{ form.slug }}
</div>
<div class='form_row' id='file_row'>
<p id='file_errors' class="form_row_errors">{% if
form.file.errors %}{{ form.file.errors }}{% endif %}</p>
{{ form.file.label_tag }}{{ form.file }}
</div>
<input id="add_cat_btn" type='submit' value="save">
</form>
<hr>
<h2>Categories</h2>
<ul id="categories">
{% for cat in categories %}
<li>{{ cat.name }}</li>
{% endfor %}
</ul>
</body>
</html>
--
You received this message because you are subscribed to the Google Groups "Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to django-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.
No comments:
Post a Comment