Size: a a a

Django [ru] #STAY HOME

2019 March 07

s

st4rtr00p3r in Django [ru] #STAY HOME
отфильтруй по id
источник

s

st4rtr00p3r in Django [ru] #STAY HOME
max([m.revision for m in (Meal.objects.filter(id=num)])
источник

s

st4rtr00p3r in Django [ru] #STAY HOME
и потом это значение в
источник

s

st4rtr00p3r in Django [ru] #STAY HOME
Meal.objects.filter(id=num).filter(revision=max_r)
источник

NO

Nikita Omen in Django [ru] #STAY HOME
Откуда я этот num возьму?)
источник

s

st4rtr00p3r in Django [ru] #STAY HOME
ну не знаю поищи
источник

TM

Tim Mustafin in Django [ru] #STAY HOME
Nikita Omen
Всем привет, подскажите пожалуйста.
у меня есть модель, у нее есть ревизия и прошлая версия.
Как можно написать queryset, который будет возвращать только последнюю ревизию?
class Meal(models.Model):
   parent = models.ForeignKey(
       'Meal',
       verbose_name=_('Родитель'),
       on_delete=models.CASCADE,
       blank=True,
       null=True,
       default=None
   )

   revision = models.SmallIntegerField(
       verbose_name=_('Ревизия'),
       default=0,
       blank=True
   )
Либо запустить рекурсивный поиск, либо знать максимальную глубину ревизии, либо изменить схему
источник

TM

Tim Mustafin in Django [ru] #STAY HOME
Не вижу других вариантов
источник

TM

Tim Mustafin in Django [ru] #STAY HOME
Еще можно попробовать сделать join самого на себя
источник

NO

Nikita Omen in Django [ru] #STAY HOME
окей, спасибо. я думал о join, но пока не придумал
источник

NO

Nikita Omen in Django [ru] #STAY HOME
Думаю, придется что-то более сложное делать .
источник

s

st4rtr00p3r in Django [ru] #STAY HOME
[max([m.revision for m in (Meal.objects.filter(id=meal.id)] for meal in Meal.objects.all()]
источник

s

st4rtr00p3r in Django [ru] #STAY HOME
{meal.id : max([m.revision for m in (Meal.objects.filter(id=meal.id)] for meal in Meal.objects.all()}
источник

s

st4rtr00p3r in Django [ru] #STAY HOME
Tim Mustafin
Либо запустить рекурсивный поиск, либо знать максимальную глубину ревизии, либо изменить схему
рекурсивный поиск,эт когда сам на себя ссылка у скщности
источник

s

st4rtr00p3r in Django [ru] #STAY HOME
ну если там с parent, то так и искать,задавать начальный id и список составлять.
источник

s

st4rtr00p3r in Django [ru] #STAY HOME
потом по списку проходиться и максимальное значение определять
источник

NO

Nikita Omen in Django [ru] #STAY HOME
Переборами это конечно можно, но дорого. Я думал может sql-запросом одним сделать получится
источник

NO

Nikita Omen in Django [ru] #STAY HOME
Двумя от силы :)
источник

s

st4rtr00p3r in Django [ru] #STAY HOME
убери рекурсию
источник

TM

Tim Mustafin in Django [ru] #STAY HOME
Заведи себе просто uid, который будет одинаковый вне зависимости от версии
источник