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 Rates
und haben Clients
. Jeder Client
sollte 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 Client
möchte ich die Company
Auswahlmöglichkeiten entfernen (da dies bereits über die Schaltfläche "Client hinzufügen " auf der Company
Seite ausgewählt wurde) und die Rate
Auswahlmöglichkeiten Company
auch darauf beschränken.
Wie gehe ich in Django 1.0 vor?
Meine aktuelle forms.py
Datei ist im Moment nur Boilerplate:
from models import *
from django.forms import ModelForm
class ClientForm(ModelForm):
class Meta:
model = Client
Und das views.py
ist 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_to
scheint vielversprechend, aber ich weiß nicht, wie the_company.id
ich 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.)