¸üÐÂʱ¼ä:2022Äê03ÔÂ18ÈÕ11ʱ18·Ö À´Ô´:ÀÖÓãµç¾º ä¯ÀÀ´ÎÊý:
DjangoÌṩÁËһЩѡÏîÀ´¿ØÖÆÁбíÒ³µÄÏÔʾ×ֶΡ¢ËÑË÷×ֶΡ¢¹ýÂËÆ÷µÈµÈ£¬ÕâЩѡÏîÔÚÓ¦ÓõÄadmin.pyÎļþµÄÄ£Ð͹ÜÀíÀàÖÐʹÓ᣽ÓÏÂÀ´ÒÔGoodsÄ£ÐÍΪÀý£¬¶Ô³£ÓÃÁбíҳѡÏî½øÐнéÉÜ¡£
list_display Ñ¡ÏîÓÃÓÚ¿ØÖÆÒ³ÃæÕ¹Ê¾µÄ×ֶΣ¬¸ÃÑ¡ÏîµÄֵΪԪ×é»òÁбíÀàÐÍ£¬ÆäÖеÄÔªËØ¿ÉÒÔÊÇÄ£ÐÍ×ֶλò×Ô¶¨Òå×ֶΡ£
ʹÓÃlist_display¿ØÖÆÔÚÒ³ÃæÖÐÏÔʾÉÌÆ·idºÍÉÌÆ·Ãû³Æ£¬Ê¾ÀýÈçÏ£º
list_display = ('id', 'name') #Ôª×éÐÎʽ
list_display = ['id', 'name'] #ÁбíÐÎʽ
×Ô¶¨Òå×Ö¶ÎÖ¸ÓëÄ£ÐÍÏà¹Ø£¬µ«²¢²»°üº¬ÔÚÄ£ÐÍÖеÄ×ֶΣ¬ÕâÖÖ×Ö¶ÎÊǶ¨ÒåÔÚ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_linksÑ¡ÏîÓÃÓÚÉèÖÃÐèÔÚÒ³ÃæÖÐÒÔÁ´½ÓÐÎʽչʾµÄ×ֶΣ¬ÀýÈ磺
list_display_links = ('id', 'name')
´ËÊ±Ò³ÃæÖеÄidºÍname×ֶν«ÒÔÁ´½ÓÐÎʽչʾ£¬ÈçÏÂͼËùʾ¡£

µ¥»÷ͼ6-14ÖÐÉÌÆ·ÁÐ±í²¿·Öid×ֶλòname×Ö¶ÎÖеÄÁ´½Ó£¬¿É½øÈëÏàÓ¦¼Ç¼µÄ±à¼Ò³Ãæ¡£
list_filterÑ¡ÏîÓÃÓÚ¿ªÆôÁбíÒ³¹ýÂËÆ÷£¬¸ÃÑ¡Ïî¿ÉÒÔ½ÓÊÕÄ£ÐÍÖеÄ×Ö¶Î×÷Ϊ¹ýÂËÌõ¼þ£¬Ò²¿É½ÓÊÕ×Ô¶¨Òå¹ýÂËÆ÷¡£
ÒÔGoodsÄ£ÐÍΪÀý£¬Ê¹ÓÃlist_filterÉèÖÃÔÚÒ³ÃæÖÐÒÔÉÌÆ·Ãû³Æ×÷Ϊ¹ýÂËÌõ¼þ£¬Ê¾ÀýÈçÏ£º
list_filter = ('name',) # ÒÔname×÷Ϊ¹ýÂË×Ö¶Î
ÁбíÒ³µÄ¹ýÂËÆ÷»áÔÚÒ³ÃæÓÒ²àչʾ£¬ÈçͼËùʾ:

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Ëùʾ¡£

Ñ¡ÔñÉÌÆ·À´ÐÞ¸ÄÒ³ÃæÄ¬ÈÏÿҳÏÔʾ100ÌõÊý¾Ý£¬Ê¹ÓÃlist_per_pageÑ¡Ïî¿ÉÒÔÉèÖÃÿҳÏÔʾµÄÊý¾ÝÁ¿¡£ÀýÈ磬ÉèÖÃÿҳÏÔʾ5Ìõ¼Ç¼£¬Ê¾ÀýÈçÏ£º
list_per_page = 5 # ÿҳչʾ5Ìõ¼Ç¼ˢÐÂÑ¡ÔñÉÌÆ·À´ÐÞ¸ÄÒ³Ãæ£¬´ËÊ±Ò³ÃæÐ§¹ûÈçͼ6-17Ëùʾ¡£

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

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

ͼ6-20ĬÈÏЧ¹ûÐÞ¸Äactions_on_topÑ¡ÏîΪFlase£¬ÄÇÃ´Ò³Ãæ¶¥²¿²»»áÔÙÏÔʾ¶¯×÷£¬´úÂëÈçÏ£º
actions_on_top = False±£´æÉèÖã¬Ë¢ÐÂÒ³Ãæ£¬Ð§¹ûÈçͼ6-21Ëùʾ¡£

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

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

PythonÔõÑùÌí¼Ó¡¢É¾³ý¡¢ÐÞ¸ÄÁбíÔªËØ£¿
Îı¾Êý¾Ý·ÖÎöÓÐʲô×÷Óã¿
ʲôÊǽ»²æÑéÖ¤£¿Ê²Ã´ÊÇÍø¸ñËÑË÷£¿
»úÆ÷ѧϰÖÐÈëÃż¶±ØÑ§µÄËã·¨ÓÐÄÄЩ£¿
ÀÖÓãµç¾ºÈ˹¤ÖÇÄÜ¿ª·¢¿Î³Ì
±±¾©Ð£Çø