Disons que j'ai les éléments suivants 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 a plusieurs Companies
chacun ayant une gamme de Rates
y Clients
. Chaque Client
devrait avoir une base Rate
qui est choisi parmi ses parents Company's Rates
et non un autre Company's Rates
.
Lors de la création d'un formulaire pour ajouter un Client
je voudrais supprimer le Company
(puisqu'il a déjà été sélectionné via un bouton "Ajouter un client" sur le site de la Commission européenne). Company
page) et limiter les Rate
les choix qui en découlent Company
également.
Comment dois-je procéder dans Django 1.0 ?
Mon actuel forms.py
n'est pour l'instant que du réchauffé :
from models import *
from django.forms import ModelForm
class ClientForm(ModelForm):
class Meta:
model = Client
Et le views.py
est également de 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})
Dans la version 0.96 de Django, j'ai été en mesure d'y remédier en faisant quelque chose comme ce qui suit avant d'effectuer le rendu du 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 prometteuse mais je ne sais pas comment passer en the_company.id
et je ne suis pas sûr que cela fonctionne en dehors de l'interface d'administration de toute façon.
Merci. (Cela semble être une demande assez basique mais si je dois revoir quelque chose, je suis ouvert aux suggestions).
0 votes
Merci pour l'indication de "limit_choices_to". Cela ne résout pas votre question, mais la mienne :-) Docs : docs.djangoproject.com/fr/dev/ref/models/fields/