首页 > 解决方案 > Django:添加 ForeignKey limit_choices_以关联另一个或相同的模型实例

问题描述

这是我的代码。

std_name = models.ForeignKey(
StudentInfo, on_delete=models.CASCADE)

def get_std_class_name(self):
   return int(self.std_name.std_subject_class.std_class_name_N)

def limit_subject_std_choices():
   return {'std_subject_class__std_class_name_N':'get_std_class_name' }

subject_name = models.ForeignKey(StdSubject,on_delete=models.CASCADE, limit_choices_to=limit_subject_std_choices)

但显示错误。/admin/results/studentinfo/1/change/ int() 以 10 为基数的无效文字:'get_std_class_name'

我不知道我的代码有什么问题。我想当任何学生在任何科目上打分时,都会根据她的班级名称显示科目。只是我想从这个模型实例中获取学生班级信息并在这个函数中传递一个值。

def limit_subject_std_choices():
       return {'std_subject_class__std_class_name_N':'get_std_class_name'}

标签: pythondjangodjango-modelsdjango-formsdjango-views

解决方案


Django 文档中limit_choices_to,值应该是dict带有表达式 askey和值 asdict value

在您的情况下,您正在尝试查找模型中每个实例的值,这是不可能的

那么在你的情况下有什么可能?

std_subject_class__std_class_name_N期望一个PK值,(一个整数值),所以你应该传递一个有效的整数作为

subject_name = models.ForeignKey(StdSubject, on_delete=models.CASCADE,
                                 limit_choices_to={'std_subject_class__std_class_name_N': 123})

推荐阅读