У меня есть трейдеры, которые оцениваются на регулярной основе.Оценки имеют внешний ключ к трейдеру.Я хочу перечислить всех трейдеров вместе с их текущим статусом оценки.Это возможно с помощью пользовательского свойства, добавленного в модель трейдера.Однако я хочу иметь возможность фильтровать результаты по состоянию последней оценки (например, все те текущие оценки, которые все еще открыты).Однако, как было показано ранее ( Пользовательские свойства в запросе ), пользовательское свойство модели не может быть включено в запрос.
Я бы создал внешний ключ в Traderмодель, которая записывает этот идентификатор самой последней оценки, однако это невозможно, потому что тогда модели будут ссылаться друг на друга, и тогда вы создаете проблему кругового упорядочения при создании классов, т. е. трейдер ссылается на оценку, но оценка не имеетПока еще не объявлено или не ставится на оценку, но Trader еще не объявлен.
До сих пор я предполагал, что буду использовать Trader в качестве базового запроса и просматриваю оценки.Я думал, что альтернативой, чтобы обойти эту проблему, было бы создание запроса на основе оценки, а затем поиск трейдеров.Однако это означает, что те трейдеры, которые еще не были оценены, никогда не появятся в результатах (если я не убедился, что у трейдеров всегда есть хотя бы одна запись оценки).Или, я полагаю, я мог бы прибегнуть к использованию необработанного 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)
...