限制ManyToManyField声明中的选择

时间:2014-10-29 16:53:32

标签: django django-models

我已将代码剥离到相关部分。

在我的模型定义中,我有3个相关的类:项目员工服务台

每个桌面都通过 ForeignKey 链接到项目
在我对 Desk 类的定义中,我有以下几行:

project = models.ForeignKey(Project)

现在,每个员工也以完全相同的方式与项目相关。

这是我的问题:

我正在尝试将每个服务台链接到不同的员工,所以我添加了一行:

employee = models.ManyToManyField(Employee, null=True, blank=True)

但我不希望每个员工都可以链接到指定的桌面
我希望能够将桌面链接到我想要的员工,并链接到相同的项目

我试图将我的行修改为以下内容:

employee = models.ManyToManyField(Employee, null=True, blank=True, limit_choices_to={'project': project})

但是我收到以下错误:

Error when calling the metaclass bases
int() argument must be a string or a number, not 'ForeignKey'

我尝试将我的行改为:

limit_choices_to={'project': project.id}

limit_choices_to={'project': project.pk}

limit_choices_to={'project': self.project}

limit_choices_to={'project': self.project.pk}

还有许多其他变种但没有任何结果......

欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

您可以在表单中使用queryset而不是模型中的limit_choices_to,并将project_id传递给表单或从表单实例(form.instance.project)加载:< / p>

class YourFormForm(forms.ModelForm):
    def __init__(self, project_id, *args, **kwargs):
        super(YourFormForm, self).__init__(*args, **kwargs)
        if 'initial' in kwargs:
             self.fields['employee'].queryset = Employee.objects.filter(project_id=self.instance.project_id)