我已将代码剥离到相关部分。
在我的模型定义中,我有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}
还有许多其他变种但没有任何结果......
欢迎任何建议。
答案 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)