Digamos que tengo lo siguiente en mi 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)
Es decir, hay múltiples Companies, cada uno con un rango de Ratesy Clients. Cada uno Clientdebe tener una base Rateelegida de su padre Company's Rates, no otro Company's Rates.
Al crear un formulario para agregar un Client, me gustaría eliminar las Companyopciones (ya que eso ya se ha seleccionado a través de un botón "Agregar cliente" en la Companypágina) y limitar las Rateopciones a eso Companytambién.
¿Cómo hago esto en Django 1.0?
Mi forms.pyarchivo actual es solo repetitivo en este momento:
from models import *
from django.forms import ModelForm
class ClientForm(ModelForm):
class Meta:
model = Client
Y el views.pytambién es básico:
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})
En Django 0.96 pude hackear esto haciendo algo como lo siguiente antes de renderizar la plantilla:
manipulator.fields[0].choices = [(r.id,r.name) for r in Rate.objects.filter(company_id=the_company.id)]
ForeignKey.limit_choices_toparece prometedor, pero no sé cómo pasar the_company.idy no estoy claro si eso funcionará fuera de la interfaz de administrador de todos modos.
Gracias. (Esto parece una solicitud bastante básica, pero si debo rediseñar algo estoy abierto a sugerencias)