Django: из списка ForeignKey-Parents: познакомьтесь с самым новым ребенком - PullRequest
1 голос
/ 12 марта 2020

есть ли способ получить из списка ForeignKey-Parents тот, который получил новейшего ребенка? Например:

class parent(models.Model):
    name = models.CharField(*)

class child(models.Model):
    parent = models.ForeignKey(parent, *)

Теперь, учитывая список родителей, я хочу получить родителя, к которому был добавлен последний ребенок. Есть ли простой способ сделать это в Django?

Спасибо за ответы!

1 Ответ

2 голосов
/ 12 марта 2020

Нельзя полагаться на первичный ключ, чтобы узнать, что было добавлено в последний раз. Вам лучше добавить временную метку для этого. Таким образом, вы можете изменить свою модель на:

class Parent(models.Model):
    name = models.CharField(max_length=128)

class child(models.Model):
    parent = models.ForeignKey(Parent, on_delete=models.CASCADE)
    created = models.DateTimeField(<b>auto_now_add=True</b>)

Тогда вы можете получить родителя с самым последним потомком с:

Parent.objects.filter(pk__in=<i>list_of_parents</i>).order_by(<b>'-child__created'</b>).first()

Это вернет объект Parent, если такой родительский элемент существует, и None в противном случае.

Если добавление временной метки является , а не параметром, вы можете попробовать работать с первичным ключом, но база данных не само по себе распределяет значения первичного ключа в определенном порядке:

# does <i>not</i> per se works

Parent.objects.filter(pk__in=<i>list_of_parents</i>).order_by(<b>'-child__pk'</b>).first()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...