2014-09-03 68 views
1

期间场奇怪的错误,我用Mongoengine 0.8.7 + Django的1.6.5,MongoDB的2.7 我有模型Mongoengine + Django的:渲染

class Tweet(DynamicDocument): 
#user = ReferenceField(User, reverse_delete_rule=CASCADE) 
#id = StringField(db_field='id',required=True) 
text = StringField(db_field='text', required=True) 
lang = StringField(db_field='lang', max_length=200) 
slug = StringField(db_field='slug', max_length=200) 
retweeted = BooleanField() 
#retweet_count = IntField() 
text_length = IntField() 
date_modified = DateTimeField(default=datetime.now) 
is_published = BooleanField(default=True) 
tags = ListField(ReferenceField(Tag)) 

#meta = {'allow_inheritance': False} 

def __unicode__(self): 
    return self.text 

def save(self, *args, **kwargs): 
    self.text_length = len(self.text) 
    return super(Post, self).save(*args, **kwargs) 

def get_absolute_url(self): 
    return reverse('post-detail', args=[self.id]) 

def get_edit_url(self): 
    return reverse('post-update', args=[self.id]) 

def get_delete_url(self): 
    return reverse('post-delete', args=[self.id]) 

查看在views.py:

class TweetListView(ListView): 
    model = Tweet 
    context_object_name = "tweet_list" 

    def get_template_names(self): 
     return ["blog/tweet_list.html"] 

    def get_queryset(self): 
     tweets = Post.objects 
     if 'all_posts' not in self.request.GET: 
      tweets = tweets.filter(text__startswith='RT') 
     tag = self.request.GET.get('tag', None) 
     if tag: 
      tweets = tweets.filter(tags=tag) 

     #if not tag: 
     # tweets = tweets.filter(retweeted=True) 
     return tweets 

而且模板

{% extends "base.html" %} 

{% block content %} 
    {% for tweet in tweet_list %} 
     <div style="margin-bottom: 20px;"> 
       <h4>tweet.id: {{ tweet.id }}</h4> 
      {{ tweet.text|linebreaks }} 
         tweet.retweeted: {{ tweet.retweeted }} 
      tweet.created_at: {{ tweet.created_at }} 

      {% if tweet.tags %} 
      Tags: 
      <ul> 
       {% for tag in tweet.tags %} 
        <li><a href="?tag={{ tag.id }}">{{ tag }}</a></li> 
       {% endfor %} 
      </ul>   
       {% endif %} 
     </br> 
      <a href="{{ tweet.get_absolute_url }}" class="btn btn-small">Read</a> 
      <a href="{{ tweet.get_edit_url }}" class="btn btn-small">Edit</a> 
      <a href="{{ tweet.get_delete_url }}" class="btn btn-small">Delete</a> 
     </div> 
    {% endfor %} 
{% endblock %} 

所有工作正常,并鸣叫在浏览器中显示,而鉴于我使用网络滤波器is_published=True但如果我改变一些其他它开始抛出错误: 例如我使用:text__startswith =“RT”(字段中的文本),结果是:

Exception Value:  

id must be an instance of (str, unicode, ObjectId), not <type 'dict'> 

Exception Location:  D:\WinPython-32bit-2.7.5.1\python-2.7.5\lib\site-packages\bson\objectid.py in __validate, line 203 

如果我更改为tweets.filter(slug__startswith='RT')结果:

Exception Value:  

Cannot resolve field "slug" 

Exception Location:  build\bdist.win32\egg\mongoengine\queryset\transform.py in query, line 60 

我用外部脚本挖掘推文,现在想用Flask查询现有集合,以在Web界面中显示推文。我不想在ORM中定义所有推文结构。

我有Robomongo,我看到手动添加从推文附近的管理员帖子,由Twitter的python库挖掘。字段被命名为“文本”和“郎”,因为在鸣叫JSON中,它们被命名为相同。 为什么其他领域不起作用?

回答

1

找到自己的答案:

在views.py我改变tweets = Post.objectstweets = Tweet.objects - 这是是主要错误使用大写模式,没有我需要查询

领域于是我改名集合tweets - 现在我的查询有效,并且没有_cls依赖