Python 为什么是烧瓶+;Mongoengine没有';不允许显示与数据库模型不完全对应的数据库项?

Python 为什么是烧瓶+;Mongoengine没有';不允许显示与数据库模型不完全对应的数据库项?,python,mongodb,twitter,flask,mongoengine,Python,Mongodb,Twitter,Flask,Mongoengine,为什么Flask+Mongoengine不允许显示与db模式模型不完全对应的db项 这是我的类Tweet(在Flask应用程序的models.py中),继承自Post,text和lang字段的名称相同,因为它们来自Twitter API和每条Tweet class Tweet(Post): text = db.StringField(required=True) lang = db.StringField(max_length=255, required=True) 当我通过a

为什么Flask+Mongoengine不允许显示与db模式模型不完全对应的db项

这是我的类Tweet(在Flask应用程序的models.py中),继承自Post,textlang字段的名称相同,因为它们来自Twitter API和每条Tweet

class Tweet(Post):
    text = db.StringField(required=True)
    lang = db.StringField(max_length=255, required=True)
当我通过admin保存Tweet帖子时,它会保存到Mongodb,我可以在list.html中呈现它:

{% for tweet in tweets %}
<b>Tweets list</b>
  <h2><a href="{{ url_for('posts.detail', slug=tweet.slug) }}">{{ tweet.text }}</a></h2>

    {% if tweet.post_type == 'Tweet' %}
        <b>{{ tweet.text }}</b>
        <p>{{ tweet.lang }}</p>
    {% endif %}
{% endfor %}
{%用于tweets%中的tweet}
推文列表
{%if tweet.post_type=='tweet%}
{{tweet.text}
{{tweet.lang}

{%endif%} {%endfor%}
问题:在这个集合中,我存储了很多包含所有字段的完整推文,所有这些推文都有文本和语言字段,但没有显示在浏览器中。 我使用外部脚本挖掘推文,现在想使用Flask查询现有的集合,以在web界面中显示推文。我不想在ORM中定义所有的tweet结构

我有Robomongo,我看到Twitter python库在推文附近的管理员帖子中手动添加了它。字段名为“text”和“lang”,因为在tweet JSON中它们的名称相同。

确保一条tweet是一条,然后循环
tweet。_dynamic_Fields
属性以获取任何动态字段的名称

比如:

{% for tweet in tweets %}
<b>Tweets list</b>
  <h2><a href="{{ url_for('posts.detail', slug=tweet.slug) }}">{{ tweet.text }}</a></h2>

    {% if tweet.post_type == 'Tweet' %}
        <b>{{ tweet.text }}</b>
        <p>{{ tweet.lang }}</p>
        {% for field in tweet._dynamic_fields -%}
            <p>{{ tweet[field] }}</p>
        {%- endfor %}
    {% endif %}
{% endfor %}
{%用于tweets%中的tweet}
推文列表
{%if tweet.post_type=='tweet%}
{{tweet.text}
{{tweet.lang}

{%用于tweet中的字段。\u动态\u字段-%} {{tweet[field]}

{%-endfor%} {%endif%} {%endfor%}

这是未经测试的,我不能100%确定如何在jinja2中动态获得attr。

Ross的回答是正确的,我现在想澄清让所有工作正常的过程

  • 我猜想,如果一个JSON文档有一个
    “\u cls”:“Post.Tweet”
    attr,它就会显示出来。问题是我在推特上没有发现这样的属性。我已经使用Robomongo将其添加到现有tweet中进行测试,现在它出现在列表中,靠近简单的手动添加项

  • 在它显示之前,我解决了另一个错误:我需要将模型映射到tweet结构 所以我需要tweet有一个slug,为此我添加了
    “slug”:“Detective”

  • 结果显示出来了,但嵌套的JSON对象显示为笨重的JSON混乱

    现在的问题是如何在不更改挖掘的tweet的情况下实现相同的结果,我需要更改代码:避免检查_cls中的tweet,并将slug设置为某个现有字段


    那么我应该更改代码的哪些部分呢&?

    Tweet是一个动态文档,因为它是从Post继承而来的。我应该在哪里循环?我在views.py中添加了以下内容:类ListView(MethodView):def get(self):posts=Post.objects.all()return render_template('posts/list.html',posts=posts)添加了一个伪示例-我会在html模板中这样做。