如何引用稍后在Google App Engine中的参考属性中定义的模型?

时间:2014-05-02 02:16:29

标签: django google-app-engine

在Django中,可以使用字符串引用稍后定义的模型:

class A(models.Model):
  b = models.ForeignKey('B')

class B(models.Model):
  pass

如何使用Google App Engine db.Model执行此操作?我试过了

class A(db.Model):
  b = db.ReferenceProperty('B')

class B(db.Model):
  pass

无济于事。我应该在A?

之前转发声明B类

2 个答案:

答案 0 :(得分:1)

你不能把" B"在一个字符串中。它应该是:

    class A(db.Model):
        b = db.ReferenceProperty(B)

    class B(db.Model):
        pass

答案 1 :(得分:1)

使用ndb

class A(ndb.Model):
  b = ndb.KeyProperty('B')

class B(ndb.Model):
  pass

查找A的所有实例,引用B

A.query(A.b == somekey_for_b)

这可能是B的一种方法,它相当于一个db集合,但不是自动的,也没有集合集名称冲突的问题

或者,如果您必须坚持使用db,那么要么更改类定义的顺序,要么只使用db.Model作为引用属性定义的类型而不是实际的类。它仍然可以工作,它不会在更新时检查特定的种类。

您可以通过提供自己的验证方法验证是否提供了正确的类型