Angenommen, ich habe Folgendes in meinem 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)
Dh es gibt mehrere Companies, die jeweils einen Bereich von Ratesund haben Clients. Jeder Clientsollte eine Basis haben Rate, die von seinem Elternteil ausgewählt wird Company's Rates, nicht eine andere Company's Rates.
Beim Erstellen eines Formulars zum Hinzufügen eines Clientmöchte ich die CompanyAuswahlmöglichkeiten entfernen (da dies bereits über die Schaltfläche "Client hinzufügen " auf der CompanySeite ausgewählt wurde) und die RateAuswahlmöglichkeiten Companyauch darauf beschränken.
Wie gehe ich in Django 1.0 vor?
Meine aktuelle forms.pyDatei ist im Moment nur Boilerplate:
from models import *
from django.forms import ModelForm
class ClientForm(ModelForm):
class Meta:
model = Client
Und das views.pyist auch grundlegend:
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 konnte ich dies hacken, indem ich vor dem Rendern der Vorlage Folgendes tat:
manipulator.fields[0].choices = [(r.id,r.name) for r in Rate.objects.filter(company_id=the_company.id)]
ForeignKey.limit_choices_toscheint vielversprechend, aber ich weiß nicht, wie the_company.idich weitergeben soll, und ich bin mir nicht sicher , ob das außerhalb der Admin-Oberfläche trotzdem funktioniert.
Vielen Dank. (Dies scheint eine ziemlich einfache Anfrage zu sein, aber wenn ich etwas neu gestalten sollte, bin ich offen für Vorschläge.)