假设我的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,每个具有RatesClients的范围.每个Client应该具有从其父Company's Rates而不是另一个Company's Rates中 Select 的基址Rate.

在创建用于添加Client的表单时,我想删除Company个选项(因为已经通过Company页上的"添加客户端"按钮 Select 了这一选项),并将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代表.形式.ModelChoiceField,这是一个ChoiceField,其选项是一个model QuerySet.参见参考资料ModelChoiceField.

因此,为字段的queryset属性提供一个查询集.这取决于你的身体是如何形成的.如果你构建一个显式表单,你会有直接命名的字段.

form.rate.queryset = Rate.objects.filter(company_id=the_company.id)

如果采用默认的ModelForm对象,则为form.fields["rate"].queryset = ...

这是在视图中明确完成的.禁止黑客入侵.

Python相关问答推荐

为什么我的主页不会重定向到详细视图(Django)

Pandas 按照特殊规则保留每n行

Django文件上传不起作用:文件未出现在媒体目录或数据库中

Python主进程和分支进程如何共享gc信息?

Python -根据另一个数据框中的列编辑和替换数据框中的列值

Class_weight参数不影响RandomForestClassifier不平衡数据集中的结果

具有多个选项的计数_匹配

Python在tuple上操作不会通过整个单词匹配

如何使用Python将工作表从一个Excel工作簿复制粘贴到另一个工作簿?

为什么符号没有按顺序添加?

Polars:用氨纶的其他部分替换氨纶的部分

Python解析整数格式说明符的规则?

pyscript中的压痕问题

Pandas—在数据透视表中占总数的百分比

joblib:无法从父目录的另一个子文件夹加载转储模型

如何合并两个列表,并获得每个索引值最高的列表名称?

网格基于1.Y轴与2.x轴显示在matplotlib中

如何排除prefecture_related中查询集为空的实例?

未调用自定义JSON编码器

Python日志(log)模块如何在将消息发送到父日志(log)记录器之前向消息添加类实例变量