Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 友谊模型:如何发现友谊是否存在?_Python 2.7_Google App Engine_Model - Fatal编程技术网

Python 2.7 友谊模型:如何发现友谊是否存在?

Python 2.7 友谊模型:如何发现友谊是否存在?,python-2.7,google-app-engine,model,Python 2.7,Google App Engine,Model,我有下面的型号 class User(db.Model): name = db.StringProperty(require=True) class Friendship(db.Model): user1 = db.ReferenceProperty(User, collection_name='user1_set') user2 = db.ReferenceProperty(User, collection_name='user2_set') 我可以建立朋友和友谊。

我有下面的型号

class User(db.Model):
    name = db.StringProperty(require=True)

class Friendship(db.Model):
    user1 = db.ReferenceProperty(User, collection_name='user1_set')
    user2 = db.ReferenceProperty(User, collection_name='user2_set')
我可以建立朋友和友谊。 但是如何检查友谊是否存在呢?
有没有更好的方法来建立友谊模型?

这会很好,但你需要具体说明如何定义友谊。考虑以下用户:

a = User(name='a')
a.put()

b = User(name='b')
b.put()
您可以为每个友谊创建两个
友谊
条目,并查询其中一个以检查友谊是否存在

f = Friendship(user1=a, user2=b)
f.put()

f = Friendship(user1=b, user2=a)
f.put()

result = db.GqlQuery("SELECT * FROM Friendship WHERE user1 = :1 AND user2 = :2", a, b).get()
或者,您可以创建一个
友谊
,并在每次要检查关系是否存在时执行两个查询:

f = Friendship(user1=a, user2=b)
f.put()

result = db.GqlQuery("SELECT * FROM Friendship WHERE user1 = :1 AND user2 = :2", a, b).get()
if result is None:
  result = db.GqlQuery("SELECT * FROM Friendship WHERE user1 = :1 AND user2 = :2", b, a).get()
或者,您可以制定一条规则,规定定义友谊的顺序(例如要求字母顺序较低的名称优先):


最后一个选项是最有效的,假设您的排序并不复杂,但您需要担心边缘情况(例如,两个名为John Smith的用户)。将名称加上一些其他属性(例如用户注册时)进行散列,然后对其进行比较,将减少但不能防止出现这种情况的可能性。

将好友设置为ListProperty:

class Friendship(db.Model):
    friends = db.ListProperty(db.Key) # db.Key refers to a user
然后是一个简单的查询,以查找两个用户之间的友谊:

def getFriendship(self, userKey1, userKey2):
    query = Friendship.gql("WHERE friends = :1 AND friends = :2", userKey1, userKey2)
    return query.get()
def getFriendship(self, userKey1, userKey2):
    query = Friendship.gql("WHERE friends = :1 AND friends = :2", userKey1, userKey2)
    return query.get()