Django 1.3、Python 2.7
我有以下模型(省略了一些不相关的字段):
class Encounter(models.Model):
uuid = models.SlugField(max_length=36, unique=True, default=make_uuid, editable=False)
created = models.DateTimeField(auto_now_add=True)
subject = models.ForeignKey('Subject', to_field='uuid')
class Subject(models.Model):
given_name = models.CharField(max_length=64)
family_name = models.CharField(max_length=64)
system_id = models.CharField(max_length=32, blank=True)
uuid = models.SlugField(max_length=36, unique=True, default=make_uuid, editable=False)
def __unicode__(self):
return u'%s, %s - %s' % (self.family_name, self.given_name, self.system_id)
我想知道哪些主题出现在我的遭遇表中,它们出现了多少次。以下代码符合我的要求,但有一个例外:
s_in_e = Encounter.objects.values('subject').annotate(mycount=Count('subject'))
当我尝试按如下方式显示注释结果时:
{% for thing in s_in_e %}
<p>{{ thing.subject }} was visited {{ thing.mycount }} time{{ thing.mycount|pluralize }}.</p>
{% endfor %}
它显示主题的uuid
,而不是__unicode__()
。研究表明,这是values()
在ForeignKeyField
上操作的一个属性—它只返回id,而不返回对象。有没有其他方法来计算每个主题在我的遭遇表中出现的次数,以便我至少可以显示__unicode__()
值?理想情况下,我可以访问整个主题对象。你知道吗
我的工作主要是别人的代码,所以我不能编辑模型的现有结构。如果需要的话,我可以在模型中添加一个新字段。你知道吗
您可以从
Subject
开始并使用以下代码:在模板中:
prefetch_related
将在一个附加查询中获得所有相关的遭遇。subject.encounter_set
是QuerySet
,因此可以像在任何其他查询集上一样使用count()
方法。你知道吗相关问题 更多 >
编程相关推荐