Filtering ForeignKey Choices in a Django ModelForm
Suppose you have the following models defined:
class Company(models.Model): name = ... class Rate(models.Model): company = models.ForeignKey(Company) name = ... class Client(models.Model): name = ... company = models.ForeignKey(Company) base_rate = models.ForeignKey(Rate)
The goal is to ensure that when creating a client, the available rate choices are limited to those within the parent company.
In the Django 1.0 forms.py file:
from models import * from django.forms import ModelForm class ClientForm(ModelForm): class Meta: model = Client def __init__(self, company_id, *args, **kwargs): '''Filter the rate choices to only include those for the specified company''' super(ClientForm, self).__init__(*args, **kwargs) self.fields['base_rate'].queryset = Rate.objects.filter(company_id=company_id)
In the views.py:
from django.shortcuts import render_to_response, get_object_or_404 from models import * from forms import * def addclient(request, company_id): the_company = get_object_or_404(Company,>
By filtering the QuerySet assigned to the 'rate' field, the available choices for the 'base_rate' ForeignKey are restricted to the appropriate rates within the specified company.
The above is the detailed content of How to Filter ForeignKey Choices in a Django ModelForm Based on Parent Company?. For more information, please follow other related articles on the PHP Chinese website!