- 1. Кіріспе
- 2. Мысал
- 3. Сипаттама мысалы
Келесі күні мен сайтта мазмұнды модерациялауға арналған қосымшамен жұмыс істей бастадым және әкімші панелінде есептегіштерді қосу арқылы мәселені шештім.
Қазір осылай көрінеді
Тапсырманың өзі тривиальды, бірақ белгілі болғандай, бұл тапсырма бірден жұмыс істемейтінін білмей-ақ, бір нюанс бар.
Кіріспе
Әкімші панеліндегі үлгілер үшін теңшелетін мәтінді орнату үшін әдетте үлгінің мета нысанындағы verbose_name_plural айнымалы мәнін қайта анықтаймыз. Ең көп таралған нұсқа - көп тілді қолдауды қосу. Мысалы,
from django.utils.translation import ugettext_lazy as _ class Article(models.Model): class Meta: verbose_name = _('Article') verbose_name_plural = _('Articles')
Ол әрқашан жұмыс істейді және біз оның неге жұмыс істейтініне таң қалмаймыз. Және ол жұмыс істейді, себебі ugettext_lazy - нәтижені дәл қажет кезде қайтаратын жалқау функция.
Дәл осылай, сіз жалқау функцияларды пайдаланып, нысандар санын немесе белгілі бір нысандар санын қайтарып, оларды әкімшілік панельдегі осы мәтінге қосуға болады.
Мысал
Осылайша, модерация прокси үлгісі үшін мен модерацияланбаған нысандардың санын тарттым.
# -*- coding: utf-8 -*- from django.utils.functional import lazy from django.utils.translation import ugettext_lazy as _ from knowledge.models import Article from moderation.managers import ArticleModeratedQuerySet class ModeratedArticle(Article): class Meta: proxy = True verbose_name = _('Article') verbose_name_plural = lazy(lambda: _('Articles ({})').format(ModeratedArticle.objects.to_moderation().count()), str)() objects = ArticleModeratedQuerySet.as_manager()
Сипаттама мысалы
Бүкіл сыныпты талдап көрейік. Бұл арнайы прокси үлгісі
- Модерация үшін қолданбада мақала үлгісін көрсетуге мүмкіндік береді
- Тек модерацияланбаған нысандарды қайтаратын арнайы нысан менеджері бар
Сіз шынымен объект менеджеріне қызығушылық танытпайсыз; ол қолданбаға қосуды жоспарлаған кез келген логиканы босатады.
Модельдің прокси үлгісі болуы да міндетті емес. Мұның бәрін сіз өз қалауыңыз бойынша жасай аласыз.
Бірақ сіз үшін ең қызықты сызық келесі болады
verbose_name_plural = lazy(lambda: _('Articles ({})').format(ModeratedArticle.objects.to_moderation().count()), str)()
- Ең алдымен, ол жалқау нысанды пайдаланады,
- функция берілетін болса, ол қалыпты функция немесе ламбда функциясы болуы мүмкін. Менің жағдайда ламбда.
- айналмалы соңғы деректер түрі де жалқау дегенге екінші аргумент ретінде str жіберіледі.
- және соңғы дананы алу үшін функцияның өзі орындалады, бұл жолдың соңындағы жақша операторы арқылы орындалады ()
Нәтижесінде әкімшілік панельге қызығушылық тудыратын нысандардың есептегішін қосу мүмкін болады.
Good