contenttype不是外键吗?

时间:2017-04-06 12:10:02

标签: django content-type

在Django中,我们有ContentType模型。 考虑我有模型A,B和C.

class A(models.Model):
  field1 = models.BooleanField(default=True)
  c = models.OneToOneField(myapp.C)

class B(models.Model):
  field2 = models.CharField()

class C(models.Model):
  limits = models.Q(app_label=u'students', model=u'a') | \
             models.Q(app_label=u'myapp', model=u'b')
  content_type = models.ForeignKey(ContentType, limit_choices_to=limits)

现在如果我有一个C的对象说c1的content_type为a,如果存在A的对象,则可以访问c1.ac1.a.field1。 那么,如果我可以通过GenericForeignKey访问a,为什么需要c1

如果我调用c2.b.field2,如果c2是C的对象,且content_type为B,那该怎么办?

1 个答案:

答案 0 :(得分:0)

正如knbk评论的那样,我们应该选择A到C之间的OneToOneField和C上的GenericForeignKey。两者都是多余的。可以在模型A和B中使用通用关系来启用反向查询。