【问题标题】:Is it possible to store an attribute foreign key in django models?是否可以在 django 模型中存储属性外键?
【发布时间】:2020-08-08 04:03:20
【问题描述】:

在 SQL 中,您可以将表属性设置为外键,其中该外键是被引用表的属性。

在 Django 模型中,models.ForeignKey() 引用一个对象。是否可以引用字段而不是对象?如果不是,我们应该如何设计模型以使我们可以使用引用的对象。

例如,如果我有以下表格。我可以在 SQL 中做到这一点:

             pk
courseList(course_id, course_title, professor, day, time)

                               pk
TutoringClassList(course_id, tutor_id)

这里,TutoringClassList 中的course_idcourseList 中的course_id 的外键

然而,Django 会为TutoringClassList 提供类似的东西

TutoringClassList(course, tutor)

其中course 是引用courseList 的模型外键对象,tutor(我们假设也创建了TutorList 模型)也是引用TutorList 的模型对象

最终目标

我想存储外键的属性而不是对象。如果我不能这样做,那么为该对象操作该属性值的最佳方法是什么?

【问题讨论】:

  • 不清楚你在问什么,你能举个例子说明你想达到什么吗?您可以通过将_id 附加到字段名称来访问ForeignKey 字段的原始值,如果这是您的意思吗?
  • 您可以传递 ForeignKey 的原始值,而不是 Django 中的对象:TutoringClassList(course_id=course.id, tutor_id=tutor.id)
  • @IainShelvington 所以看起来应该是这样的:course_id = course.id 而不是 course = models.ForeignKey(course, on_delete....)
  • 你想定义一个ForeignKey但不传递引用的模型?
  • 是的。属性的ForeignKey,就像在sql 中一样。假设这是可能的

标签: sql django django-models


【解决方案1】:
class TutoringClassList(models.Model):
   course = models.ForeignKey(courseList, on_delete=models.CASCADE)
   tutor = models.ForeignKey(TutorList, on_delete=models.CASCADE)

此方法使用外键 或者 您可以传递 ForeignKey 的原始值而不是 Django 中的对象:

TutoringClassList(course_id=course.id, tutor_id=tutor.id)

【讨论】:

  • 做第二个有什么缺陷吗?它被认为是好的做法吗?
猜你喜欢
  • 2019-03-18
  • 2020-07-03
  • 2012-06-04
  • 2018-05-21
  • 2012-02-12
  • 1970-01-01
  • 2013-02-07
  • 2018-12-02
  • 2020-05-21
相关资源
最近更新 更多