Django 限制ManyToManyField声明中的选项

Django 限制ManyToManyField声明中的选项,django,django-models,Django,Django Models,我已将代码剥离到相关部分 在我的模型定义中,这里有3个相关的类:项目,员工,办公桌 每个办公桌通过一个外键链接到一个项目 在我对课桌的定义中,我有以下几行: project = models.ForeignKey(Project) 现在,每个员工也以完全相同的方式与一个项目相关 我的问题来了: 我试图将每个办公桌与不同的员工联系起来,因此我添加了以下行: employee = models.ManyToManyField(Employee, null=True, blank=True) 但我

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

在我的模型定义中,这里有3个相关的类:项目员工办公桌

每个办公桌通过一个外键链接到一个项目
在我对课桌的定义中,我有以下几行:

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}
还有许多其他的变化,但都没有给出任何结果


欢迎任何建议。

您可以在表单中使用
queryset
,而不是将模型中的
选项限制为
,并将
project\u id
传递到表单或从表单实例(
form.instance.project
)加载它:


实际上我有两种不同的形式。一个用于桌面创建,其中员工字段隐藏且为空;另一个用于桌面编辑,其中项目始终已存在。我想这解决了一个问题。但是,如果查询集仅在第一次加载时更新,则可能会出现矛盾,因为其他用户可能会在两次不同加载之间更新列表。是否可以在每次调用表单时更新查询集?我的意思是,如果我删除kwargs中的“if‘initial’”?它还能工作吗?是的,你可以删除它,
\uuuuu init\uuuu
方法被称为每个表单实例化。好的,我将使用你的解决方案,因为它工作完美,似乎符合我的所有要求!谢谢!事实上,我对你的解决方案有意见。在选择框中,我只得到我想要的员工,这很完美。但是,在验证更改后,我会收到一条错误消息,告诉我需要做出有效的选择,而N不是有效值。(N是所选员工的id)。
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)