Django-mptt порядок сортировки не соответствует ожидаемому - и нельзя применить фильтрацию
Я использую Django 3.2 и django-mptt 0.13.4
У меня есть следующие объекты:
class Comment(models.Model):
parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')
created_at = models.DateTimeField(auto_now=True)
# ... other fields and methods
class MPTTMeta:
order_insertion_by = ['created_at']
class Meta:
permissions = [('perm_1', 'Permission 1'),
('perm2', 'Permission 2'),]
class Commentable(models.Model):
comments = GenericRelation(Comment)
# ... other fields and methods
class Meta:
abstract = True
class Foo(Commentable):
class Meta:
abstract = False
В моем коде представления я обращаюсь к комментариям следующим образом:
class FooDetailView(DetailView):
def get_context_data(self, **kwargs):
context = super(FooDetailView, self).get_context_data(**kwargs)
foo = self.get_object()
context['comments'] = foo.comments.all() # I want to use a Models Manager instead
# ...
В моем шаблоне (я не использую mptt templatetags - по причинам слишком долгим, чтобы вдаваться в них здесь), я делаю что-то вроде этого:
{% for comment in comments %}
{% render_comment comment %} <!-- my own templatetag that renders as I wish -->
{% endfor %}
Однако, комментарии отображаются с самым ранним комментарием первым - почему?! Я попробовал следующее - и сортировка осталась неизменной:
- Добавлен
ordering
атрибут `['-created_at'] в Comment::Meta - Привязка метода
order_by('-created_at')
к вызову методаall()
в FooDetailView::get_context_data()
Мои вопросы следующие:
- How can I get the comments to be displayed with the latest first?
- How can I filter the comment objects using a custom model manager, so I can call that instead of
all()
?