我需要根据其他ForeignKey过滤ForeignKey的选项。
class LabValue(models.Model):
measurement = models.ForeignKey(
'LabMeasurement', on_delete=models.CASCADE)
unit = models.ForeignKey(
LabMeasurementUnit,
on_delete=models.CASCADE,
limit_choices_to={'parameter__id': self.measurement.parameter.id},
)
如何检索self.measurement.parameter.id
?如果我手动输入ID而不是self.measurement.parameter.id
,例如“1”,则查询可以正常工作。
def __str__(self):
return str(self.measurement.parameter.id)
也按预期工作并返回e。 G。 1结果
答案 0 :(得分:0)
我不相信这是可能的,不是由于Django的ORM,而是由于数据库本身的工作方式。 measurement
是ForeignKey
,因此它是两个表之间的关系。但表之间的关系不涉及过滤。
因此,您必须在更新模型的表单级别实现此功能,或者,如果不满足所需的期望,则覆盖模型的save
函数并抛出错误。
答案 1 :(得分:0)
一个非常明确的答案:你做不到。
说明:
这是一个django模型,当你创建模型对象/保存时,只创建了你的model object
,并且在那个时候传递了指定实例的有效外键,因此不能直接对特定的选择进行建模。需要从视图中处理它。
因此,如果您已处理view
中的选项选项,但您可以覆盖clean()
方法来引发错误。
在模型中你可以使用如下的清洁方法:
def clean(self):
if self.measurement.parameter.id == 1:
# .. do whatever you want to write if this condition happens
pass
elif self.measurement.parameter.id in [1,2,3,4,55,6]: # or just pass set of ids, statically or with queryset
# .. code
else:
raise Exception("Unexpected selection of choice!!!")