2010-06-09 34 views
8

我的模型获得的独特的多对多条记录列表:从查询集

class Order(models.Model): 
    ordered_by = models.ForeignKey(User) 
    reasons = models.ManyToManyField(Reason) 
class Reason(models.Model): 
    description = models.CharField() 

基本上是一个用户创建一个订单,并给出该订单的原因。即约翰有两个订单(一个用于铅笔,因为他已经出门了,因为他不喜欢他现在的库存,另一个订单是因为他没有出栏)。

我想打印出一个列表,其中列出了用户下订单的所有原因。所以在约翰的情况下,它应该打印出“他不在”,“他不喜欢他现有的股票”;只有这两条线。如果我简单地选择所有约翰的命令,重复它们并打印出他们的“理由”,它会打印出“他不在”,“他不喜欢他现有的股票”,然后“他又出来了”。我不想要这些重复的值。

如何选择所有订单的理由清单,以便列表中包含所有唯一行?

回答

12
Reason.objects.filter(order__ordered_by=john).distinct()