Скажіть, у мене є таке 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)
Тобто їх декілька Companies
, кожен має діапазон Rates
і Clients
. Кожен Client
повинен мати базу, Rate
яку обирають батьки Company's Rates
, а не іншу Company's Rates
.
Створюючи форму для додавання Client
, я хотів би видалити Company
вибір (оскільки це вже було обрано за допомогою кнопки "Додати клієнта" на Company
сторінці) та обмежити Rate
вибір Company
також.
Як мені це зробити в Django 1.0?
forms.py
На даний момент мій файл - це лише котельня:
from models import *
from django.forms import ModelForm
class ClientForm(ModelForm):
class Meta:
model = Client
І також views.py
є основним:
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})
У Django 0.96 мені вдалося зламати це, зробивши щось на зразок наступного перед рендерінгом шаблону:
manipulator.fields[0].choices = [(r.id,r.name) for r in Rate.objects.filter(company_id=the_company.id)]
ForeignKey.limit_choices_to
здається перспективним, але я не знаю, як пройти the_company.id
і мені не зрозуміло, чи буде це працювати поза інтерфейсом адміністратора.
Дякую. (Це здається досить базовим запитом, але якщо я повинен щось переробити, я відкритий для пропозицій.)