在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.a
或c1.a.field1
。
那么,如果我可以通过GenericForeignKey
访问a
,为什么需要c1
。
如果我调用c2.b.field2,如果c2是C的对象,且content_type为B,那该怎么办?
答案 0 :(得分:0)
正如knbk评论的那样,我们应该选择A到C之间的OneToOneField和C上的GenericForeignKey。两者都是多余的。可以在模型A和B中使用通用关系来启用反向查询。