对于我们的Django应用程序,我们有一个ManagerProfile,它通过OneToOne关系附加到Django User模型。对于一种形式,我们希望下载属于特定公司的经理。为此,我们使用UserModelMultipleChoiceField,它接受管理器的User对象的查询集。
# models.py that holds the ManagerProfile class
class ManagerProfile(models.Model):
company = models.ForeignKey(Company)
user = models.OneToOneField(settings.AUTH_USER_MODEL)
要创建查询集,我们会执行查询,通过managerprofile关系(https://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships)查询用户。
# inside get_form_kwargs
self.company = get_object_or_404(Company, pk=kwargs['company_id'])
kwargs['managers'] = User.objects.filter(managerprofile__company=self.company)
我们的代码无处不在,但我们得到了Heroku ......
"FieldError: Cannot resolve keyword 'managerprofile' into field. Choices are: action_object_actions, actor_actions, address, date_joined, email, emailaddress, first_name, follow, groups, id, is_active, is_staff, is_superuser, last_login, last_name, logentry, management, managers_of, password, socialaccount, target_actions, user_permissions, username"
我们还尝试在没有ManagerProfiles的情况下排除User对象...
kwargs['managers'] = User.objects.exclude(managerprofile__isnull=True).filter(managerprofile__company=self.company)
并重新组织查询集的生成方式......
profiles = ManagerProfile.objects.filter(company=self.company)
kwargs['managers'] = User.objects.filter(managerprofile__in=profiles)
...但我们总是会遇到同样的错误。
由于某种原因,在构建查询集时无法识别User-ManagerProfile关系,但我们能够在整个应用程序的其余部分从ManagerProfile中获取数据。