my に次のものがあるとします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
。また、それが管理インターフェイスの外で機能するかどうかもわかりません。
ありがとう。(これはかなり基本的な要求のように思えますが、何かを再設計する必要がある場合は、提案を受け付けています。)