Dites que j'ai ce qui suit dans mon 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)
C'est-à-dire qu'il y en a plusieurs Companies
, chacun ayant une plage de Rates
et Clients
. Chacun Client
doit avoir une base Rate
choisie parmi ses parents Company's Rates
, pas une autre Company's Rates
.
Lors de la création d'un formulaire pour ajouter un Client
, je voudrais supprimer les Company
choix (car cela a déjà été sélectionné via un bouton "Ajouter un client" sur la Company
page) et limiter les Rate
choix à cela Company
également.
Comment procéder à ce sujet dans Django 1.0?
Mon forms.py
dossier actuel est juste passe-partout pour le moment:
from models import *
from django.forms import ModelForm
class ClientForm(ModelForm):
class Meta:
model = Client
Et views.py
c'est aussi basique:
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})
Dans Django 0.96, j'ai pu pirater cela en faisant quelque chose comme ceci avant de rendre le modèle:
manipulator.fields[0].choices = [(r.id,r.name) for r in Rate.objects.filter(company_id=the_company.id)]
ForeignKey.limit_choices_to
semble prometteur mais je ne sais pas comment passer the_company.id
et je ne sais pas si cela fonctionnera de toute façon en dehors de l'interface d'administration.
Merci. (Cela semble être une demande assez basique mais si je devais repenser quelque chose, je suis ouvert aux suggestions.)