2011-03-30 92 views
0

我有经常评估的交易者。评估对交易者有一个外键。我想列出所有交易者以及他们当前的评估状态。这可以使用添加到交易者模型的自定义属性。但是,我希望能够过滤最新评估状态的结果(例如,所有当前评估仍处于打开状态)。但是,如前所示(Custom properties in a query),您不能在查询中包含自定义模型属性。如何将儿童模型中的最新记录包含到查询中

我会在Trader模型中创建一个外键,记录最新评估的id,但这不可能,因为这样模型会相互引用,然后进入循环排序问题在创建类时,即交易者提到评估,但尚未宣布评估,或者先评估,但未声明交易者。

到目前为止,我认为我会使用交易者作为我的基本查询,并查找评估。我认为解决问题的另一种方法是基于评估创建查询,然后查找交易者。然而,这意味着那些尚未评估过的交易者将永远不会出现在结果中(除非我确定交易者总是至少有一个评估记录)。或者我想我可以诉诸使用原始SQL。

任何有关如何解决这个问题的建议将不胜感激。

下面是型号:

Class Trader(models.Model): 
    territory = models.ForeignKey(Territory) 
    organisation_name = models.CharField(max_length=30) 
    contact_title = models.CharField(choices=TITLE_CHOICES, max_length=4) 
    contact_forename = models.CharField(max_length=30, blank=True) 
    contact_lastname = models.CharField(max_length=30) 
    ... 

    def _get_current_evaluation(self): 
     return Evaluation.objects.filter(trader=self).latest('open_date') 

    current_evaluation = property(_get_current_evaluation) 

Class Evaluation(models.Model): 
    trader = models.ForeignKey(Trader) 
    open_date = models.DateField("Open Date", null=True, blank=True) 
    rated_date = models.DateField("Rated Date", null=True, blank=True) 
    closed_date = models.DateField("Closed Date", null=True, blank=True) 
    status = models.ForeignKey(RatingStatus, null=True, blank=True) 
    ... 

回答

0

http://docs.djangoproject.com/en/dev/ref/models/querysets/#latest
http://docs.djangoproject.com/en/dev/ref/models/querysets/#order-by

“我想列出沿 所有的交易者与他们目前的评估状态。”

traders = Trader.objects.all() 

{% for trader in traders %} 
    {{ trader }} : {{ trader.evaluation_set.latest.status|default:"Not Evaluated" }} 
{% endfor %} 

“不过,我希望能够在 最新评估的状态筛选 的结果(例如,所有 那些次评价是 仍处于打开状态) “。

“我想到了一个替代方案来解决 问题是创建基于评估查询 ,然后查找 贸易商来代替。但是,这意味着 ,那些谁没有被 尚未评估交易商,会从未出现在 结果中(除非我确定 交易者总是至少有一个 评估记录)。“

如果您要通过evaluation_status = open进行筛选,您将无法获得尚未评估过的交易者。

这样:

status = RatingStatus.get(status='open') 
traders_with_open_evals = Traders.objects.filter(evaluation__status=status).distinct() 

这是不是真的有必要,但供大家参考:

我会 的操盘模式已经创建了一个外键,它记录ID 的最新评价,然而,这是不可能的,因为 然后模型将参考每个 其他,然后你进入一个 环形次序问题,当 创建类,即交易是指 来评估,但评估还没有 被宣布,又或把 评价第一,但操盘手是没有宣布 。

http://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey

如果你需要创建一个尚未被 定义的模型的关系 ,您可以使用 模型的名称,而不是模型对象 本身:

class Car(models.Model): 
    manufacturer = models.ForeignKey('Manufacturer') 
    # ... 

class Manufacturer(models.Model): 
    # ... 

要引用在另一个 应用程序中定义的模型,您可以明确指定 应用程序标签具有完整的 模型。解决圆形进口 时

class Car(models.Model): 
    manufacturer = models.ForeignKey('production.Manufacturer') 

这种参考是有用的 :例如,如果 制造商型号以上 定义所谓的生产,其他应用程序 你需要使用两个应用程序之间的依赖性

+0

谢谢。我将当前状态添加到我的交易者模型,并且工作。虽然我刚刚看到你的补充... – alj 2011-03-30 13:07:25