【问题标题】:Django Model set foreign key to a field of another ModelDjango 模型将外键设置为另一个模型的字段
【发布时间】:2010-10-18 07:54:24
【问题描述】:

有没有办法在 django 中将外键设置为另一个模型的 字段?

例如,假设我有一个 ValidationRule 对象。而且我希望规则定义另一个模型中的哪些字段要被验证(以及一些其他信息,例如它是否可以为空、数据类型、范围等)

有没有办法在 django 中存储这个字段级映射?

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    我还没有尝试过,但似乎从 Django 1.0 开始,您可以执行以下操作:

    class Foo(models.Model):
        foo = models.ForeignKey(Bar, to_field='bar')
    

    这方面的文档是here。

    【讨论】:

    • 正是我想要的。我希望这也意味着我可以做到foo.foo_bar=value_bar。无需查询 Bar
    • 在 2017 年,使用 Django 2.0 这完全解决了我的问题。谢谢。
    • 理想情况下,引用的字段在整个表中应该是唯一的,无论是主键还是“unique”参数设置为 True 的字段。
    【解决方案2】:

    是和不是。 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 选项创建自定义中间表来保存元数据。

    【讨论】:

      猜你喜欢
      • 2012-05-20
      • 2017-01-31
      • 1970-01-01
      • 2018-04-14
      • 2017-08-30
      • 2019-03-11
      • 2016-03-13
      • 1970-01-01
      • 2018-07-09
      相关资源
      最近更新 更多