2014-09-03 3 views
1

J'utilise Mongoengine 0.8.7 + Django 1.6.5, MongoDB 2.7 J'ai modèleMongoengine + Django: erreurs étranges avec des champs pendant le rendu

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]) 

Voir en 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 
et

modèle

{% 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 %} 

tout fonctionne bien et tweets a montré dans le navigateur tout en vue j'utilise fi ltre is_published=True mais si je change quelque autre, il commence à jeter des erreurs: Par exemple, j'utilise: text__startswith = 'RT' (texte sur le terrain), résultat:

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 

Si je change de tweets.filter(slug__startswith='RT') résultat:

Exception Value:  

Cannot resolve field "slug" 

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

J'ai extrait des tweets avec un script externe et je veux maintenant utiliser Flask pour interroger la collection existante afin d'afficher les tweets dans l'interface Web. Et je ne veux pas définir toute la structure des tweets dans ORM.

J'ai Robomongo et je vois manuellement ajouté à partir des postes d'administration près des tweets, extrait par la bibliothèque Twitter python. Les champs sont nommés "texte" et "lang" car dans le tweet JSON ils sont nommés pareil. Pourquoi un autre champ ne fonctionne pas?

Répondre

1

trouvé réponse moi-même:

dans views.py i changé tweets = Post.objects à tweets = Tweet.objects - qui était était principale erreur d'utiliser le modèle supérieur qui ne possède pas de champs i besoin d'interroger

Alors je renomme collection tweets - et maintenant mes requêtes fonctionnent, et aucune dépendance _cls

Questions connexes