views:

156

answers:

3

I'm just beginning to learn Django and I would like to use different queryset in a ModelChoiceField.

I have 3 models like that :

class Politic(models.Model):
name = models.CharField(max_length=100)

class Economic(models.Model):
name = models.CharField(max_length=100)

class Category(models.Model):
politic = models.ForeignKey(Politic, blank = True, null = True)
economic = models.ForeignKey(Economic, blank = True, null = True)

And a form like that :

class MyForm(forms.Form):
choice = forms.ChoiceField(choices = (("0", u"---------"), ("1", u"Politic"), 
                                      ("2",  u"Economic")),
                           required=False)

category = forms.ModelChoiceField(queryset=Economic.objects.all(), 
                                  required=False)

In my template, I use Ajax to populate my category field with a list of all Politic or Economic value according to my choice field.
But if I choose "Politic", I have a problem in the validation of my form because the queryset of my category field is Economic.objects.all(), not Politic.objects.all().
How can I change my dynamicaly queryset? Any ideas?

+2  A: 

You can have 2 different selects One for politic and one for economic and show/hide them based on choice field.

Or maybe Abstract Model Inheritance would solve your problem

Kugel
A: 

One possibility would be to use a Generic Relation in your Catagory model.

Jeff Bradberry
A: 

Thanks for your answers, I try to use your two solutions (Abstract Model and Generic Relation) but it doesn't resolve my problem.
So I create two differents ModelChoiceField (one for Politic and one for Economic) and I use hide/show effects of Jquery in my template (like you say Kugel).
But if you have any others ideas for my problem, I'm interessed.

Baba