【问题标题】:Multiple foreign keys for one relation in DjangoDjango中一个关系的多个外键
【发布时间】:2011-10-03 14:56:52
【问题描述】:

我有两个这样的 django 模型:

class Review(models.Model):
    ...
    grade_value_order = models.ForeignKey('GradeValues', db_column="WART_OC_KOLEJNOSC",  related_name="REC_WART_OC_FK")
    grade_type = models.ForeignKey('GradeValues', db_column="TOC_KOD", related_name="REC_WART_OC_FK")

    class Meta:
        ...
        managed = False

class GradeValues(models.Model):
    grade_order = models.IntegerField(db_column="KOLEJNOSC", primary_key=True)
    grade_type = models.ForeignKey('GradeType', db_column="TOC_KOD", primary_key=True)
    ...

如您所见,GradeValues 类中有 2 个主键,Review 中有 2 个外键。他们应该在 GradeValues 和 Review 之间建立一对多的关系。但它不起作用。这要怎么强求?我使用的是只读的 Oracle 数据库,所以我无法修改任何内容。

【问题讨论】:

  • 什么不起作用?而且一张表不能有两个主键。
  • 当我输入例如Review.objects.all()[1].grade_type 我得到提升 self.field.rel.to.DoesNotExist
  • 它确实存在吗?所需评论行的TOC_KOD 列中有什么? GradeValues 表的主键是什么?是多列的吗?
  • 好的,看来我们的 db 有问题。但是,是的,主键是多列的。我很抱歉打扰。
  • Django does not support 多列pks。

标签: django django-models foreign-keys composite-primary-key


【解决方案1】:

我没有尝试做你所描述的事情,但我认为你根本不需要更改底层数据库。

您需要在 GradeValues 与其自身[1] 之间显式创建多对多关系,并将 Review 指定为中间表[2]

[1]https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ManyToManyField.symmetrical

[2]https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships

在那些文档页面中的某个地方,我想你可能会找到答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-28
    • 2023-01-26
    • 2020-12-30
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    相关资源
    最近更新 更多