应用程序引擎数据库模型参考问题

2024-10-01 13:43:55 发布

您现在位置:Python中文网/ 问答频道 /正文

如何从任务模型中获取标签数据?在

class Task(db.Model):
  title = db.StringProperty()

class Label(db.Model):
  name = db.StringProperty()

class Tasklabel(db.Model):
  task = db.ReferenceProperty(Task)
  label = db.ReferenceProperty(Label)

创建关联没有问题,但如何获取与任务相关联的标签,例如:

^{pr2}$

Tags: 数据nametaskdbmodeltitle标签label
2条回答

{你不想做很多事吗?在

class Label(db.Model)
   name = db.StringProperty()

   @property
   def members(self):
      return Task.gql("WHERE labels = :1", self.key())

class Task(db.Model)
   title = db.StringProperty();
   labels = db.ListProperty(db.Key)

那你就可以了

^{pr2}$

有一篇关于在Google code上建模实体关系的完整文章。我从这篇文章中偷了上面的代码。在

这对我适用于您当前的数据模型:

taskObject = db.Query(Task).get()
for item in taskObject.tasklabel_set:
        item.label.name

或者,您可以删除Label类,在Task和TaskLabel之间建立一对多关系:

^{pr2}$

那么

taskObject = db.Query(Task).get()
for item in taskObject.tasklabel_set:
        item.label

下面是一篇关于在数据存储中建模关系的Google文章中的提示

By defining it as a ReferenceProperty, you have created a property that can only be assigned values of type 'Task'. Every time you define a reference property, it creates an implicit collection property on the referenced class. By default, this collection is called _set. In this case, it would make a property Task.tasklabel_set.

文章可以找到here。在

我还建议在dev-appserver上的交互式控制台中使用这些代码。在

相关问题 更多 >