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 Ratese Clients. Cada um Clientdeve ter uma base Rateescolhida 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 Companyopções (como isso já foi selecionado por meio de um botão "Adicionar cliente" na Companypágina) e limitar as Rateopções a isso Companytambém.
Como eu faço isso no Django 1.0?
Meu forms.pyarquivo atual é apenas clichê no momento:
from models import *
from django.forms import ModelForm
class ClientForm(ModelForm):
class Meta:
model = Client
E o views.pytambé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_toparece promissor, mas não sei como passar the_company.ide 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.)