【问题标题】:Manytomany field returns empty listManytomany 字段返回空列表
【发布时间】:2011-05-30 17:10:00
【问题描述】:

我是 django 的新手,所以可能不知道,但我已经通过谷歌搜索并没有得到任何答案。 我有这样的模型:

class Word(models.Model):
    word = models.CharField(max_length=100)
    img = models.ImageField(upload_to='img/', blank=True, null=True)
    audio = models.FileField(upload_to='audio/', blank=True, null=True)
    language = models.ForeignKey(Language)
    def __unicode__(self):
        return self.word

class Lesson(models.Model):
    title = models.CharField(max_length=100)
    language = models.ForeignKey(Language)
    lesson_words_list = models.ManyToManyField(Word)
    def __unicode__(self):
        return self.title

我在视图中有下一个功能:

def view_lesson(request, language, lesson_title):
    cur_lesson = Lesson.objects.filter(title__iexact = lesson_title).get(language__name__iexact=language)
    words_list = cur_lesson.lesson_words_list.all()
    return render_to_response("view_lesson.html", {"language":language, "lesson_title": lesson_title, "words_list":words_list})

这是我在模板中的调用方式:

{% for Word in words_list %}        
{{ Word.word }}
{% endfor %}

问题是 words_list 是空的,而通过管理员我清楚地看到我的课程有相关的单词。 为什么会是空的?我应该在哪里寻找答案?

【问题讨论】:

  • 如何在模板中显示单词列表?此外,您的查询应该是 Lesson.objects.get(title__iexact = course_title, language__name__iexact=language)。没有意义的过滤,然后get'ing
  • 哦,谢谢我没见过的提示。

标签: django orm many-to-many


【解决方案1】:

{{ cur_lesson }} 

在您的模板中显示正确的课程?

试试:

{% for word in cur_lesson.lesson_word_list.all %}
    {{ word }}
{% endfor %}

也看看有没有

{{ cur_lesson.lesson_word_list.all }}

在模板中显示正确的单词列表

【讨论】:

  • 我已经尝试了所有这些,但所有这些都是空的,我只看到值 - 语言和课程标题。 words_list 就像 [] ,其余的只是没有显示。
  • 所以你的查询是没有从数据库中得到正确的教训,不是吗?您确定查询和您的网址正确吗?即视图正在获取正确的“语言”和“课程标题”值?
  • 是的,看起来是这样,但我不明白为什么会这样。 URL 似乎是正确的,因为它可以呈现,是的,我有正确的 'language' 和 'lesson_title' 值,至少当它们显示在我的模板中时它们还可以。
  • 顺便说一句,如果它可以帮助,当我尝试在 shell 中运行并设置值例如 language='polish',lesson_title='test_pol'(我通过管理员看到的)它告诉我没有匹配,但它只找到标题匹配。当我得到对象并将其作为语言而不是语言的价值时,它也可以工作。我只是不知道为什么会这样。之前的一切都很好,但我真的需要得到这个 words_list。
  • 请注意,是 db 中的数据有问题。
猜你喜欢
  • 2012-06-22
  • 2021-03-23
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多