有没有办法将django中的外键设置为另一个模型的字段?
例如,假设我有一个ValidationRule对象。我希望规则定义另一个模型中要验证的字段(以及其他一些信息,例如它是否可以为null,数据类型,范围等)。
有没有办法在django中存储这个字段级映射?
答案 0 :(得分:75)
我没试过这个,但似乎自Django 1.0以来你可以做类似的事情:
class Foo(models.Model):
foo = models.ForeignKey(Bar, to_field='bar')
此文档为here。
答案 1 :(得分:18)
是和否。 FK关系在类级别描述,并镜像数据库中的FK关联,因此您无法直接在FK参数中添加额外信息。
相反,我建议在另一个表上使用一个包含字段名称的字符串:
class ValidationRule(models.Model):
other = models.ForeignKey(OtherModel)
other_field = models.CharField(max_length=256)
这样,您可以使用以下字段获取字段:
v = ValidationRule.objects.get(id=1)
field = getattr(v, v.other_field)
请注意,如果您使用的是“多对多”字段(而不是“一对多”),则可以使用内置支持创建自定义中间表,以使用through选项保存元数据。