ÀÖÓãµç¾º

  • ½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

    È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

    DjangoÖÐÌṩµÄ³£ÓÃÁбíҳѡÏî

    ¸üÐÂʱ¼ä:2022Äê03ÔÂ18ÈÕ11ʱ18·Ö À´Ô´:ÀÖÓãµç¾º ä¯ÀÀ´ÎÊý:

    DjangoÌṩÁËһЩѡÏîÀ´¿ØÖÆÁбíÒ³µÄÏÔʾ×ֶΡ¢ËÑË÷×ֶΡ¢¹ýÂËÆ÷µÈµÈ£¬ÕâЩѡÏîÔÚÓ¦ÓõÄadmin.pyÎļþµÄÄ£Ð͹ÜÀíÀàÖÐʹÓ᣽ÓÏÂÀ´ÒÔGoodsÄ£ÐÍΪÀý£¬¶Ô³£ÓÃÁбíҳѡÏî½øÐнéÉÜ¡£

    1. list_display Ñ¡Ïî

    list_display Ñ¡ÏîÓÃÓÚ¿ØÖÆÒ³ÃæÕ¹Ê¾µÄ×ֶΣ¬¸ÃÑ¡ÏîµÄֵΪԪ×é»òÁбíÀàÐÍ£¬ÆäÖеÄÔªËØ¿ÉÒÔÊÇÄ£ÐÍ×ֶλò×Ô¶¨Òå×ֶΡ£

    (1)Ä£ÐÍ×Ö¶ÎÃû

    ʹÓÃlist_display¿ØÖÆÔÚÒ³ÃæÖÐÏÔʾÉÌÆ·idºÍÉÌÆ·Ãû³Æ£¬Ê¾ÀýÈçÏ£º

    list_display = ('id', 'name')                #Ôª×éÐÎʽ
    list_display = ['id', 'name']                #ÁбíÐÎʽ

    (2)×Ô¶¨Òå×Ö¶Î

    ×Ô¶¨Òå×Ö¶ÎÖ¸ÓëÄ£ÐÍÏà¹Ø£¬µ«²¢²»°üº¬ÔÚÄ£ÐÍÖеÄ×ֶΣ¬ÕâÖÖ×Ö¶ÎÊǶ¨ÒåÔÚgoods/admin.pyÎļþÖеÄһЩº¯Êý£¬ÕâЩº¯Êý»á½«Ä£ÐÍʵÀý×÷Ϊ²ÎÊý¡£

    ÀýÈ磬ÔÚgoods/admin.pyÎļþÖж¨ÒåÓÃÓÚÏÔʾÉÌÆ·ÏúÊÛ¶îµÄ×Ô¶¨Òå×ֶΓsalves_volume”,²¢Ê¹ÓÃsales_volume.short_description ÉèÖøÃ×ֶεŦÄÜ˵Ã÷¡£Ê¾Àý´úÂëÈçÏ£º

    from .models import Goods
    g = Goods()
    def sales_volume(g):
      salea = g.price * g.sales
      return"{ÏúÊÛ¶îΪ£º{}Ôª".foxmat(g.name,sales)
    sales_volume.short_description='ÉÌÆ·ÏúÊÛ¶î'

    ÒÔÉÏ´úÂëÊ×ÏÈʵÀý»¯Ä£ÐÍÀàGoods£¬È»ºó½«ÊµÀý»¯µÄÄ£ÐÍÀà×÷Ϊ²ÎÊý´«µÝµ½¶¨ÒåµÄsalves_volumeOº¯ÊýÖмÆËãÉÌÆ·ÏúÊÛ¶î¡£

    ʹÓÃlist_display Ñ¡Ïî¿ØÖÆÏÔʾsalves_volume×ֶΣ¬´úÂëÈçÏ£º

    (admin.register(Goods)
    class GoodsAdmin(admin.ModelAdmin):
    list_display = (sales_volume,)

    ÒÔÉÏ´úÂëÔÚÓ¦ÓõÄadmin.pyÎļþÖж¨ÒåÁËGoodsÄ£Ð͵ĹÜÀíÀàGoodsAdmin,ÔÚ¸ÃÀàÖÐͨ¹ý list_display Ñ¡ÏîÖ¸¶¨ÒªÏÔʾµÄ×ֶΡ£

    ´Ëʱ£¬Ë¢ÐÂÊý¾ÝÁбí£¬¿É²é¿´×Ô¶¨Òå×Ö¶ÎÏÔʾµÄÊý¾Ý£¬ÈçÏÂͼËùʾ¡£

    list_display Ñ¡Ïî

    2. list_display_linksÑ¡Ïî

    list_display_linksÑ¡ÏîÓÃÓÚÉèÖÃÐèÔÚÒ³ÃæÖÐÒÔÁ´½ÓÐÎʽչʾµÄ×ֶΣ¬ÀýÈ磺

    list_display_links = ('id', 'name')

    ´ËÊ±Ò³ÃæÖеÄidºÍname×ֶν«ÒÔÁ´½ÓÐÎʽչʾ£¬ÈçÏÂͼËùʾ¡£

    list_display_linksÑ¡Ïî

    µ¥»÷ͼ6-14ÖÐÉÌÆ·ÁÐ±í²¿·Öid×ֶλòname×Ö¶ÎÖеÄÁ´½Ó£¬¿É½øÈëÏàÓ¦¼Ç¼µÄ±à¼­Ò³Ãæ¡£

    3.list_filterÑ¡Ïî

    list_filterÑ¡ÏîÓÃÓÚ¿ªÆôÁбíÒ³¹ýÂËÆ÷£¬¸ÃÑ¡Ïî¿ÉÒÔ½ÓÊÕÄ£ÐÍÖеÄ×Ö¶Î×÷Ϊ¹ýÂËÌõ¼þ£¬Ò²¿É½ÓÊÕ×Ô¶¨Òå¹ýÂËÆ÷¡£

    (1)°´Ä£ÐÍ×ֶνøÐйýÂË

    ÒÔGoodsÄ£ÐÍΪÀý£¬Ê¹ÓÃlist_filterÉèÖÃÔÚÒ³ÃæÖÐÒÔÉÌÆ·Ãû³Æ×÷Ϊ¹ýÂËÌõ¼þ£¬Ê¾ÀýÈçÏ£º

    list_filter = ('name',)                         # ÒÔname×÷Ϊ¹ýÂË×Ö¶Î

    ÁбíÒ³µÄ¹ýÂËÆ÷»áÔÚÒ³ÃæÓÒ²àչʾ£¬ÈçͼËùʾ:

    list_filterÑ¡Ïî

    £¨2)×Ô¶¨Òå¹ýÂËÆ÷

    list_filterÒ²Ö§³Ö×Ô¶¨Òå¹ýÂËÆ÷¡£GoodsÄ£Ð͵ÄÊý¾Ý¸ù¾ÝÉÌÆ·Ãû³Æ¿É·ÖΪ“Apple Mac Pro”¡¢“Apple iPhone”¡¢“»ªÎª”ºÍ“СÃ×”ËÄÖÖÀà±ð£¬ÏÂÃæ×Ô¶¨Òå¸ù¾ÝÉÌÆ·Àà±ð½øÐÐɸѡµÄ¹ýÂËÆ÷¡£

    ×Ô¶¨Òå¹ýÂËÆ÷±¾ÖÊÉÏÊÇÒ»¸öÀ࣬¸ÃÀàÐèÒª¼Ì³Ðadmin.SimpleListFilterÀ࣬²¢ÖØÐ´lookups()Óëqueryset()·½·¨£¬ÆäÖÐlookups()·½·¨ÓÃÓÚÉèÖ÷ÖÀ࣬queryset()·½·¨ÓÃÓÚ²éѯ·ÖÀàÊý¾Ý¡£ÔÚadmin.pyÖÐ×Ô¶¨Òå¹ýÂËÆ÷À࣬ʾÀý´úÂëÈçÏ£º

    class BrandListFilter(admin.SimpleListFilter):
    title='ÉÌÆ·Ãû³Æ'
    parameter_name = 'brand_name'
    def lookupa(self, request, model_admin):
       return (
         ('0', ('Apple MacBook Pro')),
         ('1', ('Apple iPhone')),
        £¨'2'£¬£¨'»ªÎª'£©£©£¬
        £¨*3’£¬£¨‘СÃ×’£©£©£¬
      )
    def queryset(self, request, queryset):
       if self.value() == '0':
          return queryset.filter(name__istartswith='Apple MacBook Pro')
       if self.value() == '1':
          return queryset.filter(name__istartswith='Apple iPhone')
       if self.value() == '2':
          return queryset.filter(name__istartswith='»ªÎª')

    ÒÔÉÏ´úÂ붨ÒåµÄ×Ô¶¨Òå¹ýÂËÆ÷ÖУ¬ÀàÊôÐÔtitle±íʾÁбíÒ³ÉϹýÂËÆ÷µÄÃû³Æ£¬ÀàÊôÐÔ parameter_name±íʾ·ÃÎÊ·ÓÉÖÐËùЯ´øµÄ²ÎÊýÃû³Æ;looksupsO·½·¨·µ»ØÒ»¸ö¶þάԪ×飬ÄÚ²ãÔª×éÖеĵÚÒ»¸öÔªËØÊÇ×Ö·û´®ÀàÐ͵IJéѯ±àºÅ£¬µÚ¶þ¸öÔªËØÊǹýÂËÆ÷Àà±ðÃû³ÆÔª×é;querysetO·½·¨¸ù¾Ý²éѯ±àºÅ½øÐÐɸѡ£¬·µ»ØÒ»¸öQuerySet¶ÔÏó¡£

    ÔÚÄ£Ð͹ÜÀíÆ÷Öн«×Ô¶¨ÒåµÄ¹ýÂËÆ÷Ìí¼Óµ½list_filter£¬Ê¾ÀýÈçÏ£º

    class GoodsAdmin(admin.ModelAdmin):
    ¨E¨E
    list_filter = (BrandListEilter,)

    Ë¢ÐÂÑ¡ÔñÉÌÆ·À´ÐÞ¸ÄÒ³Ãæ£¬¿É¿´µ½×Ô¶¨ÒåµÄ¹ýÂËÆ÷£¬¾ßÌåÈçͼ6-16Ëùʾ¡£

    ×Ô¶¨ÒåµÄ¹ýÂËÆ÷

    4.list_per_pageÑ¡Ïî

    Ñ¡ÔñÉÌÆ·À´ÐÞ¸ÄÒ³ÃæÄ¬ÈÏÿҳÏÔʾ100ÌõÊý¾Ý£¬Ê¹ÓÃlist_per_pageÑ¡Ïî¿ÉÒÔÉèÖÃÿҳÏÔʾµÄÊý¾ÝÁ¿¡£ÀýÈ磬ÉèÖÃÿҳÏÔʾ5Ìõ¼Ç¼£¬Ê¾ÀýÈçÏ£º

    list_per_page = 5 # ÿҳչʾ5Ìõ¼Ç¼
    Ë¢ÐÂÑ¡ÔñÉÌÆ·À´ÐÞ¸ÄÒ³Ãæ£¬´ËÊ±Ò³ÃæÐ§¹ûÈçͼ6-17Ëùʾ¡£
    list_per_pageÑ¡Ïî
    ͼ6-18ÉèÖÿɱ༭×Ö¶ÎÊý¾Ý±à¼­Íê±Ïºó£¬ÏÂÀ­µ½Ò³Ãæµ×²¿£¬µ¥»÷“±£´æ”°´Å¥¿É±£´æÐ޸ĺóÊý¾Ý¡£

    6.search_fieldsÑ¡Ïî

    search_fieldsÑ¡ÏîÓÃÓÚÅäÖÃËÑË÷×ֶΣ¬Ê¾Àý´úÂëÈçÏ£º

    search_fields = ('name',)#           ±íʾÒÔname×÷ΪËÑË÷×Ö¶Î
    ÒÔÉÏ´úÂëÉèÖÃÔÚÑ¡ÔñÉÌÆ·À´ÐÞ¸ÄÒ³ÃæÒÔÉÌÆ·Ãû³Æ×öΪËÑË÷Ìõ¼þ£¬´ËʱˢÐÂÒ³Ãæ£¬Ò³ÃæÖн«³öÏÖÒ»¸öËÑË÷¿ò£¬¾ßÌåЧ¹ûÈçͼ6-19Ëùʾ¡£ 
    search_fieldsÑ¡Ïî

    7.actions_on_topÑ¡Ïî

    actions_on_topÑ¡ÏîÓÃÓÚÉèÖÃÊÇ·ñÔÚ¶¥²¿ÏÔʾ¶¯×÷ÏÂÀ­¿ò£¬Ä¬ÈÏΪTrue£¬±íʾÔÚ¶¥²¿ÏÔʾ£¬Ð§¹ûÈçͼ6-20Ëùʾ¡£

    ͼ6-20ĬÈÏЧ¹ûÐÞ¸Äactions_on_topÑ¡ÏîΪFlase£¬ÄÇÃ´Ò³Ãæ¶¥²¿²»»áÔÙÏÔʾ¶¯×÷£¬´úÂëÈçÏ£º

    actions_on_top = False
    ±£´æÉèÖã¬Ë¢ÐÂÒ³Ãæ£¬Ð§¹ûÈçͼ6-21Ëùʾ¡£

    actions_on_topÑ¡Ïî

    8.actions_on_bottomÑ¡Ïî

    actions_on_bottomÑ¡ÏîÓÃÓÚÉèÖùÜÀíÔ±¶¯×÷ÊÇ·ñÔڵײ¿ÏÔʾ£¬Ä¬ÈÏΪFalse£¬±íʾ²»Ôڵײ¿ÏÔʾ£¬µ±ÉèÖÃΪTrue±íʾÔڵײ¿ÏÔʾ¡£

    9.actionsÑ¡Ïî

    actionsÑ¡ÏîÓÃÓÚÉ趨¹ÜÀíÔ±¶¯×÷¡£ÁбíҳĬÈÏÌṩ“ɾ³ýËùÑ¡”¶¯×÷£¬¹ÜÀíԱѡ¶¨ÉÌÆ·ºóÑ¡Ôñ“ɾ³ýËùÑ¡”¶¯×÷£¬ÔÙµ¥»÷“Ö´ÐД°´Å¥£¬Ñ¡¶¨µÄÉÌÆ·»á±»É¾³ý¡£a

    ctionsÑ¡ÏîÒ²Ö§³Ö×Ô¶¨Òå¹ÜÀíÔ±¶¯×÷¡£×Ô¶¨Òå¹ÜÀíÔ±¶¯×÷µÄ±¾ÖÊÊÇÔÚ¹ÜÀíÀàÖÐÐÂÔöÒ»¸ö·½·¨£¬²¢½«¸Ã·½·¨Ìí¼Óµ½actionsÑ¡ÏîÖС£ÀýÈ磬ÏÖÐèÒª½«Í¼6-21ÖеÄÉÌÆ·Êý¾Ý±£´æµ½ExcelÎļþÖУ¬´Ëʱ¿ÉÔÚadmin.pyÎļþÖж¨ÒåÏÂÔØÉÌÆ·ÐÅÏ¢¶¯×÷¡£¾ßÌå´úÂëÈçÏ£º

    from django.http import HttpResponse
    from django.utils.encoding import escape_uri_path
    from openpyxl import Workbook
    @admin.register (Goods)
    class GoodsAdmin(admin.ModelAdmin):
        ...
        def download_excel(self, request, queryset):
            file_name='ÉÌÆ·ÐÅÏ¢.xlsx'
            meta = self.model._meta
            #Ä£ÐÍËùÓÐ×Ö¶ÎÃû
            field_names = [field.name for field in meta.fields]
            ≠¶¨ÒåÏìÓ¦ÄÚÈÝÀàÐÍ
            response = HttpResponse(content_type='application/msexcel')
            #¶¨ÒåÏìÓ¦Êý¾Ý¸ñʽ
            response['Content-Disposition'] = attachment;
            filename*=utf-8''{}.format(escape_uri_path(file_name))
            wb=workbook#´´½¨Îļþ¶ÔÏó
            ws= wb.active#ʹÓõ±Ç°»î¶¯µÄsheet±í
            ws.append(['ID'£¬‘´´½¨Ê±¼ä£¬£¬‘¸üÐÂʱ¼ä'£¬'ÉÌÆ·Ãû³Æ£¬
                      ¼Û¸ñ£¬£¬·¿â´æ£¬£¬·ÏúÁ¿’])    #½«Ä£ÐÍ×Ö¶ÎÃû×÷Ϊ±êÌâдÈëµÚÒ»ÐÐ
            for obj in queryset:                 #±éÀúÑ¡ÔñµÄ¶ÔÏóÁбí
               for field in field_names:
               #½«Ä£ÐÍÊôÐÔÖµµÄÎı¾¸ñʽ×é³ÉÁбí
               data = [getattr(obj, field) for field in field_names]
            ws.append(data)    #дÈëÄ£ÐÍÊôÐÔÖµ
            wb.save (response) #½«Êý¾Ý´æÈëÏìÓ¦ÄÚÈÝ
            return response
    download_excel.short_description="ÏÂÔØÉÌÆ·ÐÅÏ¢"

    ÒÔÉÏʾÀý´úÂëÔÚGoodsAdminÀàÖж¨ÒåÁË·½·¨download_excel()À´ÊµÏÖ“ÏÂÔØÉÌÆ·ÐÅÏ¢”µÄ¹¦ÄÜ£¬¸Ã·½·¨Í¨¹ýopenpyxlÄ£¿é½«ÁбíÒ³ÖеÄÉÌÆ·Êý¾ÝдÈëµ½ExcelÎļþÖУ¬Èç¹ûµ±Ç°Python»·¾³ÖÐûÓдËÄ£¿é£¬¿ÉʹÓÃpipÃüÁî½øÐа²×°¡£Ê¹ÓÃopenpyxlÄ£¿éʱÐèÏÈ´´½¨Îļþ¶ÔÏó;È»ºóͨ¹ýÎļþ¶ÔÏóµÄactiveÊôÐÔ»ñÈ¡ExcelÎļþÖеÄSheet±í£¬Í¨¹ýappend()·½·¨½«±êÌâÐÐдÈëµ½excelÎļþ;×îºóʹÓÃsave()·½·¨±£´æÐ´ÈëµÄÊý¾Ý¡£

    download_excel()·½·¨¶¨ÒåÍê³Éºó£¬½«ÆäÌí¼Óµ½actionsÑ¡ÏîÖУ¬Ê¾ÀýÈçÏ£º

    actions = (download_excel,)

    ÔÙ´ÎË¢ÐÂÑ¡ÔñÉÌÆ·À´ÐÞ¸ÄÒ³Ãæ£¬ÔÚ¶¯×÷ÏÂÀ­¿òÖпÉÒÔ¿´µ½×Ô¶¨ÒåµÄ¶¯×÷Òѱ»Ìí¼Ó£¬Èçͼ6-22Ëùʾ¡£

    actionsÑ¡Ïî

    µ¥»÷ͼ6-22ÖеēִÐД°´Å¥ÏÂÔØËùÑ¡ÉÌÆ·ÐÅÏ¢£¬´ò¿ªÏÂÔØµÄExcelÎļþ£¬±£´æµÄÉÌÆ·ÐÅÏ¢Èçͼ6-23Ëùʾ¡£

    actionsÑ¡Ïî






    ²ÂÄãϲ»¶£º

    PythonÔõÑùÌí¼Ó¡¢É¾³ý¡¢ÐÞ¸ÄÁбíÔªËØ£¿

    Îı¾Êý¾Ý·ÖÎöÓÐʲô×÷Óã¿

    ʲôÊǽ»²æÑéÖ¤£¿Ê²Ã´ÊÇÍø¸ñËÑË÷£¿

    »úÆ÷ѧϰÖÐÈëÃż¶±ØÑ§µÄËã·¨ÓÐÄÄЩ£¿

    ÀÖÓãµç¾ºÈ˹¤ÖÇÄÜ¿ª·¢¿Î³Ì

    0 ·ÖÏíµ½£º
    ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
    ¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿