2012-07-28 38 views
0

我有一个函数从表单获取图像,并将其与用户名一起放入数据库。所以,这里是我的数据库:覆盖App Engine中的数据

class Imagedb(db.Model): 
    name = db.StringProperty(required = True) 
    image = db.BlobProperty() 

这里是写入数据库的代码:

class Change_Profile_Image(MainHandler): 
    def get(self): 
     if self.user: 
      self.render('change_profile_image.html', username = self.user.name, firstname=self.user.first_name) 
     else: 
      self.render('change_profile_image.html') 

    def post(self): 
     imagedb = Imagedb(name = self.user.name) 
     imageupl = self.request.get("img") 
     imagedb.image = db.Blob(imageupl) 
     imagedb.put() 
     self.redirect('/profile') 

任谁,它的作品真棒。除了一件事。我试图完成的只是存储一个配置文件图片。最后发生的是这样的:

说我是用户管理员。我上传一张显示图片,该图片显示在个人资料中。我上传另一个,那个显示。很酷,除了我的数据库中有2个名称为admin属性的对象。我想编辑这个...

def post(self): 
     imagedb = Imagedb(name = self.user.name) 
     imageupl = self.request.get("img") 
     imagedb.image = db.Blob(imageupl) 
     imagedb.put() 
     self.redirect('/profile') 

,这样我可以发表图片到数据库,但如果存在,它被覆盖。有谁能帮我解决这个问题吗?我对python和app引擎比较陌生。

如果有什么不清楚的地方,请告诉我。

回答

1

您想要将Imagedb实体的关键字设置为“name”。实质上,您不需要名称字段,但是您将实例化它,如

imagedb = Imagedb(key_name = self.user.name) 

键是所有实体上的必填字段。通过使用您的用户名作为密钥,这意味着每次引用给定密钥时,它都是同一个实体。

+0

嗯。我得到(BadValueError:属性名称是必需的)。我得到的理论......只有一个相同价值的关键可以存在。因此,传入名称作为密钥意味着它将覆盖也包含名称作为密钥的任何对象。 – suitegamer 2012-07-28 06:26:03

+0

哇...我有要求=名称为真...失败。万分感谢! – suitegamer 2012-07-28 06:56:37