Django 3.0.8
admin.py
class PostAdmin(admin.ModelAdmin):
list_display = ("is_pinned",)
def _get_pinned_news(self):
pinned_news = None
try:
pinned_news = PinnedNews.objects.get(key="pinned_news")
except ObjectDoesNotExist as e:
pass # Do nothing
return pinned_news.pinned_post
def is_pinned(self, obj):
pinned_news = self._get_pinned_news()
return obj == pinned_news
is_pinned.boolean = True
Этот код показывает желаемый результат, показывая, какое сообщение является закрепленные новости (на главной странице). Но это крайне неэффективно, так как запрос выбора выполняется в al oop.
Кстати, django -cachalot будет использоваться в производстве. Так что, возможно, действительно будет сделан только один выбор из базы данных.
Не могли бы вы сказать мне, есть ли лучшее решение?