tsil
tsil

Reputation: 2069

App Engine/Python BadValueError: Members instance must have a complete key

Here is my code. I passed over some parts.

class Members(db.Model):
    author = db.UserProperty()
    username = db.StringProperty()

class Events(db.Model):
    author = db.ReferenceProperty(Members)

class MainPage(webapp.RequestHandler):
    def get(self):
        user = users.get_current_user()
        if user:
            member = Members()
            member.author = user
            member.username = ''
            member.put()

class AddEvent(webapp.RequestHandler):
    def post(self):
        event = Events()
        event.author = Members(author=users.get_current_user())
        event.put()
        self.redirect('/add')
    def get(self):
        path = os.path.join(os.path.dirname(__file__), 'templates', 'add_event.html')
        self.response.out.write(template.render(path, None))

When adding a new event, I got this error BadValueError: Members instance must have a complete key before it can be stored as a reference. I do some search and this error occured when we don't save entity instance (put()). So I added the code to save the user to the datastore but I got the same error. And when I put the code to save the user in AddEvent class, it works.

Upvotes: 0

Views: 730

Answers (1)

minou
minou

Reputation: 16563

I think you want to change your post() to something like this (not tested):

def post(self):
    member = Members.all().filter("author =", users.get_current_user()).get()
    event = Events()
    event.author = member
    event.put()
    self.redirect('/add')

You don't want to create a new Members entity, you want to retrieve the one you've already created.

Upvotes: 1

Related Questions