#python #django #python-3.x #foreign-keys #one-to-many
#python #django #python-3.x #внешние ключи #один ко многим
Вопрос:
Я использую Python 3.7 и Django. У меня есть следующие две модели…
class Article(models.Model):
title = models.TextField(default='', null=False)
class ArticleStat(models.Model):
article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='articlestats')
elapsed_time_in_seconds = models.IntegerField(default=0, null=False)
...
class Meta:
unique_together = ('article', "elapsed_time_in_seconds",)
Обратите внимание, что статья содержит несколько объектов ArticleStat. Если у меня есть объект «article» где-нибудь в моем коде, как мне ссылаться на его объект ArticleStat с наибольшим истекшим временем в_ин_секундах? Даже выполнение
article.articlestats
приводит к ошибке, поэтому я даже не знаю, как ссылаться на связанные объекты ArticleStat из моего исходного объекта.
Комментарии:
1. Не могли бы вы опубликовать точную ошибку, пожалуйста?
2.
article.articlestats
этоRelatedManager
, а не набор запросов. Вы можете вызывать в основном те же методы, что и вobjects
для обычных моделей в соответствующем диспетчере. Например,all()
,filter()
count()
,exists()
first()
,article.articlestats.all()
и т.д. …:article.articlestats.first()
выдает вам набор запросов со всеми связанными объектами, , , только первый объект (или ни один, если его нет).
Ответ №1:
article.articlestats эквивалентен ArticleStat.objects, он дает вам ссылку на менеджера. Вам нужно написать полное выражение запроса, такое как article.articlestats.all() или article.articlestats.filter(…) и т.д.
Чтобы получить то, что вы хотите, просто напишите:
article.articlestats.all().order_by('-elapsed_time_in_seconds')[0]
Обратите внимание, что это вызвало бы ошибку IndexError, если нет объектов ArticleStat, связанных с предоставленной статьей