Обновляется ли свойство auto_now_add каждый раз, когда вызывается метод put? - PullRequest
2 голосов
/ 16 октября 2011

У меня есть модель БД, в которой одно свойство имеет auto_now_add=True.Но похоже, что он не работает так, как я ожидал - он обновляется каждый раз, когда вызывается put (я использую свой собственный key_name, поэтому второй / третий / N вызов put на самом деле не создаетновая запись - просто обновите ее).

Вот код:

class User(db.Model):
    id = db.IntegerProperty()
    added = db.DateTimeProperty(auto_now_add=True)
    name = db.StringProperty()

...
    # this handler can be called several times
    def get(self):
        user = User(key_name="id"+unique_user_id)
        user.id = unique_user_id
        user.name = current_name
        user.put()

Ответы [ 2 ]

4 голосов
/ 16 октября 2011

Вы воссоздаете сущность каждый раз, вот как должен выглядеть код:

#This will create the object only once
return User.get_or_insert(key_name="id%d" % unique_user_id, 
                          id=unique_user_id, 
                          name = current_name)

#This will create the object and update some properties
#You can't change the value of key_name
user = User.get_or_insert(key_name="id%d" % unique_user_id, 
                          id=unique_user_id)
user.name = name
user.put()
return user
1 голос
/ 17 октября 2011

Перезаписывая сущность каждый раз, вы фактически создаете новую запись.Различие между auto_now и auto_now_add обеспечивается рамочной моделью;он не может действовать по-другому, основываясь на том, существует ли уже запись или нет.Вместо этого вы должны обновить существующую запись, как @ Шей предлагает .

...