Reputation: 2069
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
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