Di 'che ho nel mio 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)
Vale a dire ce ne sono molti Companies
, ognuno con un intervallo di Rates
e Clients
. Ognuno Client
dovrebbe avere una base Rate
scelta dal proprio genitore Company's Rates
, non un'altra Company's Rates
.
Quando creo un modulo per aggiungere un Client
, vorrei rimuovere le Company
scelte (dato che è già stato selezionato tramite un pulsante "Aggiungi client" sulla Company
pagina) e limitare le Rate
scelte anche a quello Company
.
Come posso procedere in questo in Django 1.0?
Il mio forms.py
file attuale è solo boilerplate al momento:
from models import *
from django.forms import ModelForm
class ClientForm(ModelForm):
class Meta:
model = Client
Ed views.py
è anche di base:
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})
In Django 0.96 sono stato in grado di hackerare questo facendo qualcosa di simile prima di eseguire il rendering del modello:
manipulator.fields[0].choices = [(r.id,r.name) for r in Rate.objects.filter(company_id=the_company.id)]
ForeignKey.limit_choices_to
sembra promettente ma non so come passare the_company.id
e non sono chiaro se funzionerà comunque al di fuori dell'interfaccia di amministrazione.
Grazie. (Questa sembra una richiesta piuttosto semplice ma se dovessi riprogettare qualcosa sono aperto ai suggerimenti.)