#django #django-models #django-mptt
#джанго #джанго-модели #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 — по причинам, которые слишком долго описывать здесь) я делаю что-то вроде этого:
{% for comment in comments %} {% render_comment comment %} lt;!-- my own templatetag that renders as I wish --gt; {% endfor %}
Однако комментарии отображаются с самым ранним комментарием первым — почему?! Я попробовал следующее — и сортировка осталась неизменной:
- Добавлен
ordering
атрибут `[‘-created_at’] для комментария::Мета - Привязанный метод
order_by('-created_at')
кall()
вызову метода в FooDetailView::get_context_data()
Мои вопросы таковы:
- Как я могу сначала отобразить комментарии с последними?
- Как я могу фильтровать объекты комментариев с помощью пользовательского менеджера моделей, чтобы я мог вызывать это вместо
all()
?