我有定期评估的交易员。评估对交易者有外键。我想列出所有交易者以及他们当前的评估状态。使用添加到Trader模型的自定义属性可以实现这一点。但是,我希望能够过滤最新评估状态的结果(例如,所有那些仍处于打开状态的当前评估)。但是,如前所示(Custom properties in a query),您不能在查询中包含自定义模型属性。
我会在Trader模型中创建一个外键,记录最新评估的id,然而,这是不可能的,因为那时模型会相互引用,然后你会遇到循环排序问题创建类,即Trader引用评估,但尚未宣布评估,或者首先评估评估,但未宣布交易者。
到目前为止,我假设我将使用Trader作为我的基本查询,并查找评估。我认为解决问题的另一种方法是基于Evaluation创建查询,然后查找Traders。但是,这意味着那些尚未进行评估的交易者将永远不会出现在结果中(除非我确保交易者始终至少有一个评估记录)。或者我想我可以使用原始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 :(得分: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,然后查找 交易员改为。但是,这意味着 那些没有过的交易员 尚未评估,将永远不会出现 结果(除非我确定 交易者总是至少有一个 评估记录)。“
如果您按照evaluate_status = open进行过滤,则无法获得尚未评估的交易者。
这样:
status = RatingStatus.get(status='open')
traders_with_open_evals = Traders.objects.filter(evaluation__status=status).distinct()
这不是必需的,但供您参考:
我会创建一个外键 Trader模型,记录该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')
这种参考可能很有用 在解决循环导入时 两个应用程序之间的依赖关系。