Digamos que tenho o seguinte no meu 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)
Ou seja, existem vários Companies
, cada um com um intervalo de Rates
e Clients
. Cada um Client
deve ter uma base Rate
escolhida de seu pai Company's Rates
, não outra Company's Rates
.
Ao criar um formulário para adicionar um Client
, eu gostaria de remover as Company
opções (como isso já foi selecionado por meio de um botão "Adicionar cliente" na Company
página) e limitar as Rate
opções a isso Company
também.
Como eu faço isso no Django 1.0?
Meu forms.py
arquivo atual é apenas clichê no momento:
from models import *
from django.forms import ModelForm
class ClientForm(ModelForm):
class Meta:
model = Client
E o views.py
também é básico:
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})
No Django 0.96, eu pude invadir isso fazendo algo como o seguinte antes de renderizar o modelo:
manipulator.fields[0].choices = [(r.id,r.name) for r in Rate.objects.filter(company_id=the_company.id)]
ForeignKey.limit_choices_to
parece promissor, mas não sei como passar the_company.id
e não sei se isso funcionará fora da interface do administrador.
Obrigado. (Parece uma solicitação bastante básica, mas se eu deveria redesenhar algo, estou aberto a sugestões.)