在referenceproperty下拉列表中过滤的问题 - Django

时间:2009-10-18 08:58:21

标签: django google-app-engine

我有以下问题。我有一个不同的联系班 用户可以使用自己的主题进行标记:

class Contact(db.Model): 
    contact_date = db.DateProperty(auto_now_add=True) 
    remarks = db.TextProperty() 
    topic = db.ReferenceProperty(Topic) 
class Topic(db.Model): 
    topic = db.StringProperty(required=True) 
    description = db.TextProperty() 
    owner = db.ReferenceProperty(User, collection_name='topic_set') 
    def __unicode__(self): 
        return '%s' % (self.topic) 

在此表单中,我只想显示某个用户的主题

class ContactForm(forms.ModelForm): 
    def __init__(self, user_filter,  *args, **kwargs): 
        self.base_fields['topic'].queryset = Topic.all().filter('owner 
= ', user_filter) 
        super(ContactForm, self).__init__(*args, **kwargs) 

然后我从视图中调用ContactForm,如下所示:

form = ContactForm(user_filter = request.user.key())

这一切都按预期工作。但是当我提交表格时,我得到了:

Caught an exception while rendering: Unsupported type for property  : 
<class 'django.http.QueryDict'> 

我做错了吗?这是关于appengine django的一些问题 实施? 彼得

1 个答案:

答案 0 :(得分:0)

联系人只能有一个主题和一个主题。正如你解释的那样:

  

我有一个联系人类,不同的用户可以用他们自己的主题标记

我会将ReferenceProperty移到主题类:

class Topic(db.Model): 
    contact = db.ReferenceProperty(Contact) 

现在一个联系人可以有多个主题。

您的例外来自于使用请求查询字典分配属性。这可能来自将user_filter声明为参数,但将其用作关键字参数。 它应该是:

form = ContactForm(request.user.key())

但如上所述,首先你应该修改你的模型。