【发布时间】:2011-07-25 07:02:51
【问题描述】:
您好,我的查询似乎有问题。我有一个项目清单。任何项目都可以设置状态(进、出、收集、销毁等)。以下是我的看法。
def client_summary(request, client_id):
client = None
items = None
try:
client = models.Client.objects.get(pk = client_id)
items = client.storageitem_set.all()
total_items = items.count()
except:
return HttpResponse(reverse(return_clients))
return render_to_response('client_summary.html', {'items':items, 'total_items':total_items, 'client':client}, context_instance = RequestContext(request))
如果我的模板中有
{%for item in items%}
{{item.itemstatushistory_set.latest}}
{%endfor%}
这将显示所有最新状态。现在我只想打印出所有状态为 Destroyed 的项目。出于某种原因,我似乎无法做到这一点。
这里还有一些来自我的模型的更多信息。
class StorageItem(models.Model):
type = models.ForeignKey(StorageObject)
client = models.ForeignKey(Client)
company_id = models.PositiveIntegerField(unique = True, blank = True, null = True)
content = models.TextField(blank = True)
alternative_id = models.CharField(verbose_name = 'Client no.', max_length = 60, blank = True)
title = models.CharField(max_length = 100)
format = models.ForeignKey(Format, blank = True, null = True)
location = models.CharField(max_length = 20, blank = True)
item_class = models.TextField(blank = True)
def __unicode__(self):
return self.title
class Status(models.Model):
description = models.CharField(max_length = 60)
notes = models.TextField(blank = True)
def __unicode__(self):
return self.description
class Meta:
verbose_name_plural = 'Status'
get_latest_by = 'date'
ordering = ['date']
class ItemStatusHistory(models.Model):
date = models.DateTimeField(auto_now = True)
contact = models.ForeignKey(Contact)
item = models.ForeignKey(StorageItem)
status = models.ForeignKey(Status)
user = models.ForeignKey(User)
def __unicode__(self):
return str(self.status
编辑:仍然存在一些问题,因为一个项目之间的关系可能有很多状态。但我只想列出已损坏物品的最新状态。
示例:假设有 3 个项目,它们有集合 item1 = [in, out, destroyed]、item2 = [destroyed, in]、item3 = [destroyed、collected, destroyed]、item4 = [in] 其中[1st status, 2nd status, 3rd status, etc]。我只想显示该项目的最新状态。
Mike 和 kriegar 都会得到类似 [item1, item2, item3, item3] 的结果。
因为 Yuji 使用了 distinct 函数,所以他会得到[item1, item2, item3]。
最后我需要得到的答案应该是[item1, item3]。
【问题讨论】:
-
您是否正在寻找 _only_ 已销毁状态的项目?还是具有任何已销毁状态的物品?
-
@Yuji 抱歉回复晚了。您的解决方案几乎是正确的。但是,由于用户可以更改项目状态,因此我只希望项目具有 已销毁 状态(如果这是 最新状态)。因此,一个项目可能在一周内处于销毁状态,但用户将其状态更改为已收集。一旦它的状态改变了。它不应该在 destroyed 状态列表中。您的代码所做的是查看任何项目以查看它是否具有 destroyed 状态。然后打印。仅当 destroyed 为最新状态时才应打印。