django多对多查询输出<foo:<built-in =“”function =“”id =“”>&gt; </foo:>

时间:2011-09-19 11:54:43

标签: django sqlite django-views django-orm

我正在使用Django 1.3和sqlite3。我的模特是:

class Trial(models.Model):
    person = models.ManyToManyField(Person, blank=True)
    def __unicode__(self):
        return self.strId

class Person(models.Model):
    name = models.CharField(max_length=500)
    def __unicode__(self):
        return self.name

我想查询数据库并返回包含名为“Tom”的人的Trial.id条目列表。我的尝试看起来像这样:

found_entries = Person.objects.filter(name__contains="Tom")
Toms = []
for items in found_entries:
    Toms.append(Trial.objects.filter(person__name__contains="Tom"))

当我将Toms列表发送到模板时,我得到一个完整的列表&lt; Trial:&lt;内置函数id&gt;&gt;

然而,当我尝试获取Toms.id,或Toms.name,甚至是Toms.person时,我收到错误:

'QuerySet' object has no attribute 'id'

我最终想要的是包含人名为“Tom”的Trial.id列表。任何帮助都是非常感激的。

2 个答案:

答案 0 :(得分:2)

您的初始查询是重新发布的。为什么不用这个:

# all the trials with a person whom name contains 'Tom'
trials = Trial.objects.filter(person__name__contains='Tom')

在你的模板中:

{% for trial in trials %}
    {{ trial.id }}
{% endfor %}

答案 1 :(得分:0)

class Trial(models.Model):
    person = models.ManyToManyField(Person, blank=True, related_name="user_trials")
    def __unicode__(self):
        return self.strId

在视图中:

found_entries = Person.objects.filter(name__contains="Tom")

模板:

{% for found_entry in found_entries %}
    {% for trial in found_entry.user_trials.all %}
        {{ trial.id }}
    {% endfor %}
{% endfor %}