Как мне отфильтровать выбор ForeignKey в Django ModelForm?
Скажем, у меня есть следующее в моемmodels.py
:
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)
То есть Есть несколькоCompanies
каждый из которых имеет диапазонRates
а такжеClients
, каждыйClient
должен иметь базуRate
который выбран из его родителяCompany's Rates
, не другойCompany's Rates
.
При создании формы для добавленияClient
Я хотел бы удалитьCompany
варианты (поскольку это уже было выбрано с помощью кнопки «Добавить клиента» наCompany
страница) и ограничитьRate
выбор к этомуCompany
также.
Как мне это сделать в Django 1.0?
Мой текущийforms.py
На данный момент файл просто шаблонный:
from models import *
from django.forms import ModelForm
class ClientForm(ModelForm):
class Meta:
model = Client
И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, id=company_id)
if request.POST:
form = ClientForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(the_company.get_clients_url())
else:
form = ClientForm()
return render_to_response('addclient.html', {'form': form, 'the_company':the_company})
В Django 0.96 я смог взломать это, выполнив что-то вроде следующего перед рендерингом шаблона:
manipulator.fields[0].choices = [(r.id,r.name) for r in Rate.objects.filter(company_id=the_company.id)]
ForeignKey.limit_choices_to
кажется многообещающим, но я не знаю, как пройти вthe_company.id
и я не уверен, будет ли это работать вне интерфейса администратора в любом случае.
Благодарю. (Это кажется довольно простой просьбой, но если мне нужно что-то изменить, я открыт для предложений.)