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 Ratese Clients. Ognuno Clientdovrebbe avere una base Ratescelta dal proprio genitore Company's Rates, non un'altra Company's Rates.
Quando creo un modulo per aggiungere un Client, vorrei rimuovere le Companyscelte (dato che è già stato selezionato tramite un pulsante "Aggiungi client" sulla Companypagina) e limitare le Ratescelte anche a quello Company.
Come posso procedere in questo in Django 1.0?
Il mio forms.pyfile 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_tosembra promettente ma non so come passare the_company.ide 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.)