Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对象列表在模板中未显示正确的数据_Python_Django_Python 3.x_Web_Django 2.1 - Fatal编程技术网

Python 对象列表在模板中未显示正确的数据

Python 对象列表在模板中未显示正确的数据,python,django,python-3.x,web,django-2.1,Python,Django,Python 3.x,Web,Django 2.1,Django模板中有一个奇怪的问题。这是一个显示文章列表的模板,对于每个人,我都会显示一个我称之为关键概念的关键字列表 奇怪的是,它没有列出关键概念,而是列出了使用该关键概念的文章 下面是我的项目的E/R图、模型和模板: Models.py class KeyConceptModel(models.Model): concept_text = models.CharField(max_length=50) def __str__(self): return s

Django模板中有一个奇怪的问题。这是一个显示文章列表的模板,对于每个人,我都会显示一个我称之为关键概念的关键字列表

奇怪的是,它没有列出关键概念,而是列出了使用该关键概念的文章

下面是我的项目的E/R图、模型和模板:

Models.py

class KeyConceptModel(models.Model):
    concept_text = models.CharField(max_length=50)

    def __str__(self):
        return self.concept_text

    def get_absolute_url(self):
        return reverse("keyconceptManuscriptusView", kwargs={"pk": self.pk})

    class Meta: 
        verbose_name = "Concetto chiave"
        verbose_name_plural = "Concetti chiave"  

class PostModel(models.Model):
    post_title = models.CharField(max_length=70)
    post_short_description = models.TextField(max_length=200)
    post_contents = models.TextField()
    post_publishing_date = models.DateTimeField(auto_now=False, auto_now_add=True)
    post_author = models.ForeignKey(AuthorModel, on_delete=models.CASCADE)
    post_keyconcept = models.ManyToManyField(KeyConceptModel)
    slug = models.SlugField(verbose_name="Slug", unique="True")
    post_highlighted = models.BooleanField(default=False)

    def __str__(self):
        return self.post_title

    def get_absolute_url(self):
        return reverse("singlepostManuscriptusView", kwargs={"slug": self.slug})

    class Meta: 
        verbose_name = "Articolo"
        verbose_name_plural = "Articoli" 
Views.py

class ListPostGDV(ListView):
    model = PostModel
    template_name = "manuscriptus_home.html"
模板

{% for posts in object_list %}
  <div id="news" class="container">
    <div class="row">
      <img class="img-fluid" src="{% static 'manuscriptus/img/demo_img.png' %}" alt="Header image">
    </div>
    <div class="row">
      <div class="col-3">
        <div class="row">
          <small class="text-muted">Pubblicato il <strong>{{ posts.post_publishing_date|date }}</strong></small>
        </div>
        <div class="row">
          {% for keyword in object_list.all %}
              <p>{{ keyword }}</p>
          {% endfor %}
        </div>
      </div>
      <div class="col-9">
        <div class="row">
          <p class="h3"><a href="{{ posts.get_absolute_url }}">{{ posts.post_title }}</a></p>
        </div>
        <div class="row">
          <p class="h5">{{ posts.post_short_description|safe|linebreaks }}</p>
        </div>
      </div>
    </div>
  </div>
{% empty %}
  <div id="news" class="container">
    <h1>Go to the admin panel and create your first post!</h1>
  </div>
{% endfor %}
{%for object_list%}
《出版日报》{{posts.post_publishing_date | date}}
{object_list.all%}中关键字的%
{{关键字}}

{%endfor%}

{{posts.post_short_description | safe | linebreaks}

{%empty%} 转到管理面板,创建您的第一篇帖子! {%endfor%}
注意:我已经使用了通用细节视图


您可以在模板中编写:

<!-- this will iterate again over the same list -->
{% for keyword in object_list.all %}
    <p>{{ keyword }}</p>
{% endfor %}
由于您希望呈现所有
帖子的
关键概念
,因此最好在
列表视图中使用
.prefetch\u related(..)
,以便在恒定数量的查询中获取
关键字
,因此:

类ListPostGDV(ListView):
模型=后模型
queryset=PostModel.objects.prefetch\u-related('post\u-keyconcept'))
#…
注意:通常模型名称为单数,没有
Model
后缀,因此
Post
而不是
PostModel
,以及
KeyConcept
而不是
KeyConceptModel

注意:由于您迭代了
对象列表
(在外循环中),该项目是一篇文章,因此我建议将其命名为
文章
,而不是
文章
,否则只会引起混淆

注意:在所有属性前面加上
post
,这有点多余。例如,当两个模型具有
name
属性,并且您希望函数能够同时处理这两个属性时,它还可以防止使用duck类型。因此,我建议删除属性的
post
前缀


你能分享一下列表视图的相关部分吗?我现在已经做了,我已经编辑了第一篇文章来添加列表视图。当我使用您的指示时,会显示以下消息:“在PostModel对象上找不到'key_concepts','key_concepts'是预取_related()的无效参数。”。怎么了?关于您添加的注释,您是正确的,但这是我在Django的第一个项目,这种类型的命名对我在开发阶段很重要。在这一阶段之后,我将使用您的指示来获得正确的命名。@Massimilianomaraca:ha,它是
post_keyconcept
:),因为您可以看到前缀的东西确实令人困惑。例如,中描述了上述一些样式。虽然人们不必使用它(在没有它的情况下,程序可以工作,这通常对习惯样式的人来说比较困难):)呃……现在我没有显示任何错误,但是在模板中没有显示关键概念。我想我最好按照你的指示去做,我也会去纠正前缀,因为我也开始把自己弄糊涂了感谢您的指示:)@Massimilianomaraca:您也编辑了模板吗(这是同样的错误,应该是
posts.post\u keyconcept.all
)。我已经按照您的指示重新创建了所有项目,现在我可以确认它现在运行了。谢谢:)
{% for keyword in posts.post_keyconcept.all %}
    <p>{{ keyword }}</p>
{% endfor %}