Заказ пост по дате - PullRequest
       7

Заказ пост по дате

0 голосов
/ 01 сентября 2018

Я создал список сообщений, и теперь я хочу упорядочить этот список по дате публикации. Если я использую order_by (-post_publishing_date) в представлении, оболочка покажет мне эту ошибку:

NameError: имя 'post_publishing_date' не определено

models.py

class PostModel(models.Model):
    post_title = models.CharField(max_length=70)
    post_short_description = models.TextField(max_length=200)
    post_contents = models.TextField()
    post_publishing_date = models.DateTimeField(auto_now=False, auto_now_add=True)
    post_author = models.ForeignKey(AuthorModel, on_delete=models.CASCADE, related_name="connected_author")
    post_keyconcept = models.ManyToManyField(KeyConceptModel, related_name="connected_keyconcept")
    slug = models.SlugField(verbose_name="Slug", unique="True")
    post_highlighted = models.BooleanField(default=False)

    def __str__(self):
        return self.post_title

    def get_absolute_url(self): 
        return reverse("singlepostManuscriptusView", kwargs={"slug": self.slug})

    class Meta:
        verbose_name = "Articolo"
        verbose_name_plural = "Articoli"  

views.py

class SinglePostGDV(DetailView):
    model = PostModel
    template_name = "manuscriptus_post_detail.html"


class ListPostGDV(ListView):
    model = PostModel
    template_name = "manuscriptus_home.html"
    queryset = PostModel.objects.filter().order_by(-post_publishing_date)

urls.py

urlpatterns = [
    path("it/blog/", ListPostGDV.as_view(), name="homeManuscriptusView"),
    path("it/blog/<slug:slug>/", SinglePostGDV.as_view(), name="singlepostManuscriptusView"), 
]

Что я не так сделал?

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Ad hoc заказ

Ну, Питон правильный. идентификатор post_publishing_date отсутствует, вы передаете имя столбца через строку , поэтому:

class ListPostGDV(ListView):
    model = PostModel
    template_name = "manuscriptus_home.html"
    queryset = PostModel.objects.filter().order_by(<b>'-post_publishing_date'</b>)

Определение порядка , присущего для модели

Обратите внимание, что вы также можете задать "внутреннее" упорядочение модели в классе Meta:

class PostModel(models.Model):
    post_title = models.CharField(max_length=70)
    post_short_description = models.TextField(max_length=200)
    post_contents = models.TextField()
    post_publishing_date = models.DateTimeField(auto_now=False, auto_now_add=True)
    post_author = models.ForeignKey(AuthorModel, on_delete=models.CASCADE, related_name="connected_author")
    post_keyconcept = models.ManyToManyField(KeyConceptModel, related_name="connected_keyconcept")
    slug = models.SlugField(verbose_name="Slug", unique="True")
    post_highlighted = models.BooleanField(default=False)

    def __str__(self):
        return self.post_title

    def get_absolute_url(self): 
        return reverse("singlepostManuscriptusView", kwargs={"slug": self.slug})

    class Meta:
        <b>ordering = ['-post_publishing_date']</b>
        verbose_name = "Articolo"
        verbose_name_plural = "Articoli"

Если вы сделаете это, все запросы к этой модели будут неявно упорядочены по -post_publishing_date. Так что это означает, что вы не можете «забыть» правильно упорядочить объекты.

Так что тогда вам не нужно заказывать его в представлениях . Конечно, вы можете определить только один такой «внутренний» порядок, и неясно, хотите ли вы использовать его здесь.

0 голосов
/ 01 сентября 2018

Аргумент order_by должен быть строкой:

queryset = PostModel.objects.filter().order_by('-post_publishing_date')
...