Powiedz, że mam w sobie następujące 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)
Tzn. Jest ich wiele Companies
, z których każdy ma zakres Rates
i Clients
. Każdy Client
powinien mieć bazę Rate
wybraną spośród jego rodzica Company's Rates
, a nie inną Company's Rates
.
Tworząc formularz dodawania a Client
, chciałbym usunąć Company
opcje (ponieważ zostały one już wybrane za pomocą przycisku „Dodaj klienta” na Company
stronie) i ograniczyć również te Rate
opcje Company
.
Jak to zrobić w Django 1.0?
Mój aktualny forms.py
plik jest w tej chwili tylko szablonem:
from models import *
from django.forms import ModelForm
class ClientForm(ModelForm):
class Meta:
model = Client
I to views.py
jest również podstawowe:
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})
W Django 0.96 byłem w stanie włamać się do tego, wykonując coś takiego przed renderowaniem szablonu:
manipulator.fields[0].choices = [(r.id,r.name) for r in Rate.objects.filter(company_id=the_company.id)]
ForeignKey.limit_choices_to
wydaje się obiecujące, ale nie wiem, jak się poddać the_company.id
i nie jestem i tak zadziała poza interfejsem administratora.
Dzięki. (To wydaje się być dość prostą prośbą, ale jeśli powinienem przeprojektować coś, jestem otwarty na sugestie).