First of all, I recommend that you read chapter 17 of Django Book (if
you haven't already) http://www.djangobook.com/en/1.0/chapter17/
Moving on, you have to create a view, as we are working on Django's
admin, then i recommend that you create one like project/app/
admin_views.py with something similar to this code:
from indica.geral.models import *
from django.http import HttpResponse
from django.template import RequestContext
from django.utils import simplejson
from django.contrib.admin.views.decorators import
staff_member_required
def country_getStates(request):
id = request.GET.get('id','')
result = [u.__dict__ for u in State.objects.filter(country=id)]
return HttpResponse(simplejson.dumps(result), mimetype='application/
javascript')
country_getStates = staff_member_required(country_getStates)
Then, you have to customize the change_form.html template with the JS
call, something like this (as you can see, i am using JQuery):
{% extends "admin/change_form.html" %}
{% block extrahead %}
<script src="http://SERVERNAME/js/jquery-1.2.3.min.js" type="text/
javascript"></script>
<script type="text/javascript" charset="utf-8">
$(function(){
$("select#id_country").change(function(){
$.getJSON("/admin/bd1/country/getStates/",{id: $(this).val()},
function(j){
var options = '<option value="">---------</option>';
for (var i = 0; i < j.length; i++) {
options += '<option value="' + j[i].id + '">' + j[i].state +
'</option>';
}
$("select#id_state").html(options);
})
})
})
</script>
{% endblock %}
Create a JS file and put this second script tag in it, that way will
be easier to maintain your template.
At urls.py you need to add a pattern to reach the view:
(r'^admin/bd1/country/getStates/$',
'project.app.admin_views.country_getStates'),
This is the classic example of a country -> state interaction, the
same for your category -> subcategory need.
[]s,
Diego Ucha
On 5 maio, 03:49, martyn <[EMAIL PROTECTED]> wrote:
> Thank you, it's just what I wanted, but do I have to write a new
> template (admin/model_name/etc...) ?
> Or can I define this directly in my model (onchange actions...) ?
>
> I have the django Book (definitive guide to django) but I can't find
> this.
>
> On 4 mai, 02:26, Diego Ucha <[EMAIL PROTECTED]> wrote:
>
> > HelloMartyn,
>
> > The main interaction, that i see you need is:
> > (On Product form) User select Category -> Subcategory field is auto-
> > filled -> User select a subcategory based on the category selected.
>
> > Then you will have to use some JS Library (I prefer JQuery, besides
> > there are some discussion about those libs on the list).
>
> > For filling this subcategory field, in terms of data transmission, i
> > use JSon, because JQuery has a fine JSon parser, in few lines it's all
> > done.
>
> > []s,
> > Diego Ucha
>
> > On May 2, 6:05 am,martyn<[EMAIL PROTECTED]> wrote:
>
> > > Hi,
>
> > > I've created a simple product model :
>
> > > class Produit(models.Model):
> > > nom = models.CharField(maxlength=200)
> > > slug = models.SlugField(prepopulate_from=('nom',))
> > > description = models.TextField(blank=True)
> > > published = models.BooleanField(default=True)
> > > prix_ht = models.DecimalField(max_digits=30, decimal_places=2)
> > > famille = models.ForeignKey('Famille')
> > > sous_categorie = models.ForeignKey('SousCategorie')
> > > clic
>
> > > class Admin:
> > > pass
>
> > > I've got also Category and SubCategory :
>
> > > class Categorie(models.Model):
> > > nom = models.CharField(maxlength=200)
> > > slug = models.SlugField(prepopulate_from=('nom',))
> > > class Admin:
> > > pass
>
> > > def __str__(self):
> > > return self.nom
>
> > > class SousCategorie(models.Model):
> > > nom = models.CharField(maxlength=200)
> > > slug = models.SlugField(prepopulate_from=('nom',))
> > > categorie = models.ForeignKey('Categorie')
> > > class Admin:
> > > pass
>
> > > def __str__(self):
> > > return self.nom
>
> > > Is there a way in django admin, in the Product form, to select the
> > > category, then the subcategories of this category only are shown in
> > > the select list.
>
> > > Thanks a lot
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---