假设我的models.py中有以下内容:
类别公司(models.Model):
名称=。。。
上课率(型号.型号):
公司=型号。外键(公司)
名称=。。。
类客户端(models.Model):
名称=。。。
公司=型号。外键(公司)
基本费率=型号。外键(费率)
也就是说,有多个公司,每个公司都有一系列费率和客户。每个客户都应该有一个基本费率,该费率是从其母公司公司的费率中选择的,而不是从另一家公司的费率中选择的
创建用于添加客户机的表单时,我希望删除公司选项(因为已经通过公司页面上的“添加客户机”按钮选择了该选项),并将费率选项也限制在该公司上
我如何在Django 1.0中实现这一点
我当前的forms.py文件目前只是样板文件:
来自模型导入的
*
从django.forms导入ModelForm
类ClientForm(ModelForm):
类元:
模型=客户端
而且views.py也是基本的:
从django.shortcuts导入渲染到响应,获取对象或404
从模型导入*
从表格导入*
def addclient(请求,公司id):
_company=get_object_或_404(company,id=company\u id)
如有要求,请发送:
form=ClientForm(request.POST)
如果form.is_有效():
form.save()
返回HttpResponseRedirect(_company.get_clients_url())
其他:
form=ClientForm()
返回render_to_response('addclient.html',{'form':form,'the_company':the_company})
在Django 0.96中,我可以通过在呈现模板之前执行以下操作来解决此问题:
操纵器.fields[0]。选择=[(r.id,r.name)用于Rate.objects.filter(company\u id=the\u company.id)]
ForeignKey.limit_choices_to似乎很有希望,但我不知道如何传入公司id,我不清楚这是否会在管理界面之外起作用
谢谢。(这似乎是一个非常基本的要求,但如果我需要重新设计一些东西,我愿意接受建议。)
ForeignKey由django.forms.ModelChoiceField表示,它是一个ChoiceField,其选项是模型查询集。请参阅ModelChoiceField的参考
因此,为字段的QuerySet属性提供一个QuerySet。取决于您的表单是如何构建的。如果您构建一个显式表单,您将有直接命名的字段
form.rate.queryset=rate.objects.filter(company\u id=the\u company.id)
如果采用默认的ModelForm对象,form.fields[“rate”].queryset=…
这是在视图中显式完成的。不要到处乱闯