说我的内容如下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也不清楚是否可以在Admin界面之外使用。
谢谢。(这似乎是一个非常基本的要求,但是如果我应该重新设计一些内容,我可以提出建议。)
ForeignKey由django.forms.ModelChoiceField表示,这是一个ChoiceField,其选择是模型QuerySet。请参见ModelChoiceField的参考。
因此,为字段的queryset属性提供一个QuerySet 。取决于表单的构建方式。如果构建显式表单,则将具有直接命名的字段。
form.rate.queryset = Rate.objects.filter(company_id=the_company.id)
如果采用默认的ModelForm对象, form.fields["rate"].queryset = ...
这是在视图中显式完成的。不得乱动。
问题内容: 说我的内容如下: 即有多个,每个都有一个和的范围。每个数据库都应有一个从其父数据库中选择的基础,而不是另一个。 创建用于添加的表单时,我想删除选择(因为已经通过页面上的“添加客户端”按钮Rate选择了该选项),并且也将选择限制于此。 我该如何在Django 1.0中做到这一点? 目前,我当前的文件只是样板文件: 而且也是基本的: 在Django 0.96中,我能够通过在渲染模板之前进行
问题内容: 我有以下模型: 我想在管理员中添加时过滤字段,如下所示: 我已经尝试了很多东西,但是没有任何效果!我怎样才能做到这一点? 问题答案: 使用方法:
问题内容: 我有一个模型和,就像这样: 现在我有了一些和对象,我想得到一个查询,该查询选择所有指向少于2的对象。 A就像一个池子,用户(B)加入池。如果仅加入1或0,则根本不应该显示该池。 这样的模型设计可能吗?还是我应该修改一下? 问题答案: 听起来像是一份工作。 如果B计数通常是您需要的过滤或排序标准,或者需要显示在列表视图中,则可以考虑通过将b_count字段添加到A模型并在添加B或添加B时
问题内容: 我有一个模型: 如何编写基于类的视图,该视图创建新的模型实例并将外键设置为? 问题答案: 我通过覆盖方法解决了这个问题。下面是详细说明的样式: 但是我们可以简短地说(感谢dowjones123),在docs中提到了这种情况。
如何仅在Laravel(5.4)中的pivot(中间)表中创建一列,然后对其结果进行过滤? 我有两个模特,电影和剧组。CastAndCrew是为一部电影工作的各种导演、制片人和演员。透视表应定义CastAndCrew成员与电影之间的关系类型。很明显,有人可能在一部电影中扮演演员,在另一部电影中扮演制片人,所以我不能在CastAndCrew表中的条目中定义这一点,因为这只适用于一部电影,对于他们拍摄
问题内容: 我的应用程序中有2个过滤器。根据某些条件,我想选择是否执行第二个过滤器。有没有办法做到这一点? 我做了一些谷歌搜索,但没有成功。我希望请求继续执行而不执行第二个过滤器。那可能吗? 任何帮助将不胜感激。 问题答案: 您可以在请求中设置一个属性,然后在第二个过滤器中对其进行检查。 您可以像这样简化上面的代码: 这样,您只需检查属性“ executeSecondFilter”的存在