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 django-users@googlegroups.com
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to