Python GAE:如何在django表单中使用ReferenceProperty?

Python GAE:如何在django表单中使用ReferenceProperty?,python,google-app-engine,django-forms,referenceproperty,Python,Google App Engine,Django Forms,Referenceproperty,我在谷歌应用程序引擎上玩了一会儿,但在使用ReferenceProperty处理POST请求时遇到了问题。我正在从现有类别创建一个下拉菜单,如下所示: <select name="mydropdown"> <label for="category">category:</label> {% for c in cats %} <option value={{ c.title }} name="category"> {{ c.t

我在谷歌应用程序引擎上玩了一会儿,但在使用
ReferenceProperty
处理POST请求时遇到了问题。我正在从现有类别创建一个下拉菜单,如下所示:

<select name="mydropdown">
<label for="category">category:</label>
    {% for c in cats %}
        <option value={{ c.title }} name="category"> {{ c.title }} </option>
    {% endfor %}
</select>
像这样,我不能用我的POST数据创建表单实例。嗯,我可以创建它,但我选择的类别将不在其中

def post(self):
   data = EntryForm(data=self.request.POST)
...

谢谢你的建议。

如果有人想知道,这里有完整的答案。就像@Daniel说的,字段名来自选择而不是选项。这就是select的外观:

<select name="category">
    <label for="category">category:</label>
    {% for c in cats %}
       <option>{{ c.title }} </option>
    {% endfor %}
 </select>
或者将该键用作模板中的
选项
名称,如下所示:

<option name="{{ c.key }}">{{ c.title }} </option>
这是我做一个新条目所需要的所有数据。
commit=False
关键字参数返回一个尚未保存到数据库的对象。这样就可以手动设置单个属性。在本例中,类别为。要保存数据,请使用
put()
-方法

new_entry = form_data.save(commit=False)
new_entry.category = cat_get
new_entry.put()
把所有的部件放在一起,处理器可能会像这样

class NewEntry(webapp.RequestHandler):

    def post(self):
        form_data =  EntryForm(self.request.POST)

        if form_data.is_valid():
            c = self.request.get("category")
            cat_get = Category.all().filter("title =", c).get()
            new_entry = form_data.save(commit=False)
            new_entry.category = cat_get
            new_entry.put()
            self.redirect("/main" )
        else:
            self.response.set_status(500) 

我不确定它是否相关,但字段名来自
选择
而不是
选项
,因此在HTML中名称是
mydropdown
。好了,我们就到了-现在我能够捕获传入的数据,即使我仍然收到一个错误
引发数据存储错误。BadKeyError('Invalid string key%s.%encoded'))
。这显然与“ReferenceProperty”有关。现在研究一下……您可能想要
{{{c.key}}
作为选项值。实际上,默认情况下您会得到它。通过从
EntryForm()
中排除类别并手动设置其值,我解决了问题。在将值添加到
Entry()
之前,必须创建
Category
的实例。谢谢你一直思考!
<option name="{{ c.key }}">{{ c.title }} </option>
    cat_obj = db.get(db.Key(key_name))
new_entry = form_data.save(commit=False)
new_entry.category = cat_get
new_entry.put()
class NewEntry(webapp.RequestHandler):

    def post(self):
        form_data =  EntryForm(self.request.POST)

        if form_data.is_valid():
            c = self.request.get("category")
            cat_get = Category.all().filter("title =", c).get()
            new_entry = form_data.save(commit=False)
            new_entry.category = cat_get
            new_entry.put()
            self.redirect("/main" )
        else:
            self.response.set_status(500)