Получение предварительного просмотра django на сайте для работы с неопубликованными публикациями - PullRequest
1 голос
/ 04 июля 2011

Я действительно надеюсь, что кто-то может пролить свет на эту проблему,

Я создал новое приложение для блогов, которое я использую на сайте django cms. Клиент запросил, чтобы блог и новостные сообщения проходили через редактор, прежде чем они будут опубликованы на сайте

Для этого я сделал следующее

def publish(self, request, queryset):
    rows_updated = queryset.update(status='p')
    if rows_updated == 1:
        message_bit = "1 story was"
    else:
        message_bit = "%s stories were" % rows_updated
    self.message_user(request, "%s successfully marked as published." % message_bit)

def un_publish(self, request, queryset):
    rows_updated = queryset.update(status='w')
    if rows_updated == 1:
        message_bit = "1 entry was"
    else:
        message_bit = "%s entries were" % rows_updated
    self.message_user(request, "%s successfully marked as un-published." % message_bit)

в администраторе модели для каждой модели (блог и новости) это позволяет клиенту обновлять статус блога или нового сообщения для опубликованных и т. Д. Однако клиент также запросил, чтобы они могли предварительно просмотреть сообщения, прежде чем они будут опубликованы. опубликован. Так как мой блог и новые наборы запросов возвращают только те сообщения, которые имеют статус 'p', для опубликованных запросов новый / блог совпадает с ошибкой при попытке просмотра сообщений с помощью функции предварительного просмотра на сайте, встроенной в интерфейс администратора django

Кто-нибудь мог обойти это, возможно, порекомендовать что-нибудь, что я мог бы попытаться заставить это работать

Спасибо

1 Ответ

3 голосов
/ 04 июля 2011

Чтобы сохранить код в чистоте, вы можете создать отдельное представление, которое отображает страницу так же, как стандартное, но не фильтрует статус.

Чем для того, чтобы работала административная ссылка, отредактируйте / добавьте get_absolute_url, поэтому в случае state = "w" он возвращает адрес для нового представления. То есть:

def get_absolute_url(self):
    if self.status == 'p'
        return "/post/%i/" % self.id
    else:
        return "/preview/post/%i/" % self.id

PS: Если вы пурист, вы можете использовать постоянную ссылку декоратор:)

@models.permalink
def get_absolute_url(self):
    if self.status == 'p'
        return ('post.views.details', [str(self.id)])
    else:
        return ('post.views.preview', [str(self.id)])

См .: http://docs.djangoproject.com/en/dev/ref/models/instances/

...