最佳答案
假设我的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
,这个基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
,我不清楚这是否将在管理界面之外工作。
谢谢。(这似乎是一个非常基本的要求,但如果我应该重新设计一些东西,我愿意听取建议。)