class OrderAdmin(object): def cad_codes(self, instance): cad_codes_content = '' for product_item in instance.product_items.all(): cad_codes_content += product_item.product.cad_code if product_item.product.norm_code: cad_codes_content += '|' + product_item.product.norm_code + ' ; ' else: cad_codes_content += ' ; ' return cad_codes_content cad_codes.short_description = _("cad_code") cad_codes.allow_tags = True cad_codes.is_column = True model_icon = 'cog' hidden_menu = False active_menu="marketing" list_display_links = ('contract_code',) list_display_links_details = True list_display = ('contract_code', 'customer', 'cad_codes', 'order_time', 'status') list_filter = ['contract_code', 'customer', 'order_time', 'status'] search_fields = ['contract_code'] Inline(ProductItem) inlines = [ProductItemInline] actions = [BatchBarcodeAction]
class CustomerAdmin(object): list_display = ('name', 'host_lever', 'short_name', 'code', 'relation_rating', 'customer_from', 'area', 'tel') search_fields = ['name'] form_layout = (Container(TabHolder( Tab('基本信息', Fieldset('热度设置', 'name', Row('is_host', 'host_lever'), Row('host_category', 'host_memo'), description="客户的热度设置"), Fieldset('基本设置', Row('short_name', 'code'), Row('value_rating', 'credit_rating'), Row('customer_type', 'relation_rating'), 'customer_from', 'customer_info'), css_id="tab_baseinfo"), Tab( '联系方式', Fieldset('联系信息', Row('city', 'area'), Row('zipcode', 'address'), 'tel', 'website', 'remarks'), Inline(Contact), css_id="tab_contact", ), ), css_class='form-horizontal')) inlines = [ContactInline] reversion_enable = True
class CountryAdmin(object): search_fields = ('name', 'code') list_display = ('name', 'code', 'continent', 'independence_day') list_filter = ('continent',) inlines = (CityInline,) model_icon = 'fa fa-bell' form_layout = ( TabHolder( Tab('General', Fieldset(None, 'name', 'continent', 'code', 'independence_day', css_class='unsort no_title' ), Fieldset('Statistics', 'area', 'population', description="EnclosedInput widget examples" ), Fieldset('Autosized textarea', 'description', description='AutosizedTextarea widget example - adapts height ' 'based on user input' ), ), Tab('Cities', Fieldset('Architecture', 'architecture', description="Tabs can contain any fieldsets and inlines" ), Inline(City), ), ), )
class CommunityAdmin(object): hidden_menu = True list_display = ("community_name", "group", "responsibility", "date_created") form_layout = (Main( Tab( "用户组", Inline(GroupInline), Fieldset( "用户权限组", "group", description="针对操作管线的用户管理组进行责任划分。", ), ), ), Side( Tab( "责任", Fieldset( "责任管理", "community_name", "responsibility", description="针对系统部件创建策略, 设置生效与否", ), ), ))
class HostAdmin(object): def open_web(self, instance): return "<a href='http://%s' target='_blank'>Open</a>" % instance.ip open_web.short_description = "Acts" open_web.allow_tags = True open_web.is_column = True list_display = ('name', 'idc', 'guarantee_date', 'service_type', 'status', 'open_web', 'description') list_display_links = ('name', ) raw_id_fields = ('idc', ) style_fields = {'system': "radio-inline"} search_fields = ['name', 'ip', 'description'] list_filter = [ 'idc', 'guarantee_date', 'status', 'brand', 'model', 'cpu', 'core_num', 'hard_disk', 'memory', 'service_type' ] list_bookmarks = [{ 'title': "Need Guarantee", 'query': { 'status__exact': 2 }, 'order': ('-guarantee_date', ), 'cols': ('brand', 'guarantee_date', 'service_type') }] show_detail_fields = ('idc', ) list_editable = ('name', 'idc', 'guarantee_date', 'service_type', 'description') save_as = True aggregate_fields = {"guarantee_date": "min"} form_layout = (Main( TabHolder( Tab( 'Comm Fiels', Fieldset('Company data', 'name', 'idc', description="some comm fields, required"), Inline(MaintainLog), ), Tab( 'Extend Fiedls', Fieldset( 'Contact details', 'service_type', Row('brand', 'model'), Row('cpu', 'core_num'), Row(AppendedText('hard_disk', 'G'), AppendedText('memory', "G")), 'guarantee_date'), ), ), ), Side(Fieldset('Status data', 'status', 'ssh_port', 'ip'), )) inlines = [MaintainInline] reversion_enable = True
class OperationAdmin(object): list_display = ('order', 'name', 'description', 'operation_group', 'period', 'operation_type') list_display_links = ('name', 'description') list_display_links_details = True active_menu = "technology" search_fields = ['name'] list_filter = ['name', 'operation_group', 'period'] exclude = ['state', 'product', 'tools', 'need_attribute'] #reversion_enable = True Inline(OperationAttribute) inlines = [OperationAttributeInline]
class CustomerAdmin(object): model_icon = 'cog' hidden_menu = False list_display = ('name', 'code', 'description', 'address', 'state', 'city', 'telephone', 'mail', 'zip_code', 'importance') list_display_links = ('name', ) list_display_links_details = True search_fields = ['name'] list_filter = ['name', 'address', 'state', 'city', 'importance'] Inline(Contactor) inlines = [ContactorInline] actions = [BatchBarcodeAction]
class ManufacturePlanAdmin(object): #manufactureplan workflow def manufactureplan_workflow(self, instance): if not instance.manufactureplan_workflow_status: return "<a href='/manufactureplan/manufactureplan_start_workflow/%d/?next=/xadmin/manufactureplan/manufactureplan/'>发起审核流程</a>" % instance.id else: return "<a href='/manufactureplan/manufactureplan_workflow/%d/?next=/xadmin/manufactureplan/manufactureplan/'>查看审核流程</a>" % instance.id manufactureplan_workflow.short_description = _("manufactureplan_workflow") manufactureplan_workflow.allow_tags = True manufactureplan_workflow.is_column = True #create productionlines def productionlines(self, instance): if instance.manufactureplan_workflow_status == 2: if instance.technology_ok: if instance.productionlines: return "<a href='/xadmin/manufactureplan/manufactureitemgroup/?_p_manufactureplan__id__exact=%d'>查看生产任务</a>" % instance.id else: return "<a href='/manufactureplan/create_productionlines/%d/?next=/xadmin/manufactureplan/manufactureplan/'>创建生产任务</a>" % instance.id else: return "工艺未就绪" else: return "审核完可创建" productionlines.short_description = _("productionline") productionlines.allow_tags = True productionlines.is_column = True def manufactureplan(self, instance): return instance manufactureplan.short_description = _("name") manufactureplan.allow_tags = True manufactureplan.is_column = True model_icon = 'cog' hidden_menu = False active_menu="marketing" list_display_links = ('manufactureplan',) list_display_links_details = True list_display = ('manufactureplan', 'order', 'start_time', 'manufactureplan_workflow', 'productionlines', 'status') list_filter = ['order', 'start_time', 'status'] search_fields = ['order'] exclude = ['code','name'] Inline(ManufactureItemGroup) inlines = [ManufactureItemGroupInline]
class ProductAdmin(object): model_icon = 'cog' hidden_menu = False show_bookmarks = False list_display_links = ('name', ) list_display_links_details = True list_display = ( 'name', 'cad_code', 'symbol', 'norm_code', 'category', 'short_desc', 'long_desc', 'ext_code', 'groups', 'created_at', 'updated_at', 'is_published', ) list_filter = [ 'cad_code', 'category', 'name', 'short_desc', 'long_desc', 'is_published', 'ext_code', 'type', 'groups', 'attributes', 'created_at', 'updated_at', ] search_fields = [ 'cad_code', ] exclude = [ 'is_published', 'ext_code', 'type', 'custom1', 'custom2', 'custom3', 'custom4', 'groups' ] Inline(ProductAttribute) inlines = [ProductAttributeInline] actions = [BatchBarcodeAction]
class PorteurAdmin(object): list_display = ('nom', 'prenom', 'statut') search_fields = ('nom', ) list_filter = ('statut', ) model_icon = 'fa fa-user' inlines = (SouscriptionSvcInLine, ) form_layout = (TabHolder( Tab( 'Général', Fieldset('Généralités', 'nom', 'prenom', 'date_de_naissance', 'statut'), Inline(SouscriptionSvc), ), ), )
class SaleAdmin(object): list_display = ('code', 'identify_date', 'sale_type', 'sale_status', 'customer', 'invoice_no', 'amount', 'gross_margin', 'pay_mode', 'delivery_date', 'deliver_address') search_fields = ['code'] form_layout = (Container(TabHolder( Tab('销售信息', Fieldset('基本信息', Row('code', 'customer'), Row('sale_type', 'sale_status'), Row('contactor', 'tel'), 'identify_date'), Fieldset( '收款信息', 'pay_mode', Row('amount', 'gross_margin'), Row('Receive', 'Arrears'), 'ReceiveDate', collapsed=True, description="(【总金额】,【毛利】会根据销售明细自动算出)", ), Fieldset( '交货信息', Row('deliver_type', 'deliver_address'), 'delivery_date', collapsed=True, ), Fieldset( '其它信息', 'note', collapsed=True, ), css_id="tab_baseinfo"), Tab('产品明细', Inline(SaleDetail), css_id="tab_productinfo")), css_class='form-horizontal')) inlines = [SaleDetailInline] reversion_enable = True def media(self): media = forms.Media() #+ self.vendor('saledetail.js') media.add_js([self.static('xadmin/vendor/saledetail/saledetail.js')]) return self.get_media() + media
class TransportListAdmin(object): def execute(self, instance): if instance.state == 1: return "<a href='/warehouse/do_transport/%d/?next=/xadmin/warehouse/transportlist/'>执行</a>" % instance.id elif instance.state == 2: return "已出库" elif instance.state == 5: return "已入库" execute.short_description = _("execute") execute.allow_tags = True execute.is_column = True def detail_values(self, instance): return instance.detail_values detail_values.short_description = _("detail_values") detail_values.allow_tags = True detail_values.is_column = True model_icon = 'cog' hidden_menu = False active_menu = "storage" show_bookmarks = False list_display = ('list_category', 'transport_category', 'detail_values', 'execute') list_display_links = ('list_category', 'transport_category') list_display_links_details = True list_filter = ['list_category', 'transport_category'] search_fields = [ 'internal_code', 'list_category', 'transport_category', 'state', 'created_at', 'productionline', 'updated_by' ] exclude = ['state', 'created_at', 'productionline'] Inline(TransportListDetail) inlines = [TransportListDetailInline]
class IVRAdmin(ReXmlAdmin): app_label = 'funcs' menu_group = 'exten_group' order = 7 inlines = [IVRKeymappingInline] form_layout = [ layout.Fieldset( '基础信息', 'name', layout.Row('registry_max_failures', 'extension_digits')), layout.Fieldset('提示音', layout.Row('greet_long_type', 'greet_long_content')), layout.Fieldset('短提示音', layout.Row('greet_short_type', 'greet_short_content')), layout.Fieldset( '按键无效提示音', layout.Row('invalid_sound_type', 'invalid_sound_content')), layout.Fieldset('退出IVR提示音', layout.Row('exit_sound_type', 'exit_sound_content')), Inline(models.IVRKeymapping), ] def get_field_attrs(self, db_field, **kwargs): attrs = super(IVRAdmin, self).get_field_attrs(db_field, **kwargs) if db_field.name == 'greet_long_content': fkwidget = widgets.ForeignKeyPopupWidget(self, base_models.MediaFile, 'true_path') charwidget = widgets.AdminTextInputWidget() attrs['widget'] = widgets.SelectRelation( self, 'greet_long_type', { 'audio': fkwidget, 'tts': charwidget, 'number': charwidget, 'count': charwidget, 'tts_var': charwidget, 'number_var': charwidget, 'count_var': charwidget, }) if db_field.name == 'greet_short_content': fkwidget = widgets.ForeignKeyPopupWidget(self, base_models.MediaFile, 'true_path') charwidget = widgets.AdminTextInputWidget() attrs['widget'] = widgets.SelectRelation( self, 'greet_short_type', { 'audio': fkwidget, 'tts': charwidget, 'number': charwidget, 'count': charwidget, 'tts_var': charwidget, 'number_var': charwidget, 'count_var': charwidget, }) if db_field.name == 'invalid_sound_content': fkwidget = widgets.ForeignKeyPopupWidget(self, base_models.MediaFile, 'true_path') charwidget = widgets.AdminTextInputWidget() attrs['widget'] = widgets.SelectRelation( self, 'invalid_sound_type', { 'audio': fkwidget, 'tts': charwidget, 'number': charwidget, 'count': charwidget, 'tts_var': charwidget, 'number_var': charwidget, 'count_var': charwidget, }) if db_field.name == 'exit_sound_content': fkwidget = widgets.ForeignKeyPopupWidget(self, base_models.MediaFile, 'true_path') charwidget = widgets.AdminTextInputWidget() attrs['widget'] = widgets.SelectRelation( self, 'exit_sound_type', { 'audio': fkwidget, 'tts': charwidget, 'number': charwidget, 'count': charwidget, 'tts_var': charwidget, 'number_var': charwidget, 'count_var': charwidget, }) return attrs
class HostAdmin(object): def open_web(self, instance): return """<a href="http://%s" target="_blank">Open</a>""" % instance.ip open_web.short_description = "Acts" open_web.allow_tags = True open_web.is_column = True list_display = ( "name", "idc", "guarantee_date", "service_type", "status", "open_web", "description", "ip", ) list_display_links = ("name", ) raw_id_fields = ("idc", ) style_fields = {"system": "radio-inline"} search_fields = ["name", "ip", "description", "idc__name"] list_filter = [ "idc", "guarantee_date", "status", "brand", "model", "cpu", "core_num", "hard_disk", "memory", ( "service_type", xadmin.filters.MultiSelectFieldListFilter, ), ] list_quick_filter = ["service_type", {"field": "idc__name", "limit": 10}] # list_quick_filter = ["idc_id"] list_bookmarks = [{ "title": "Need Guarantee", "query": { "status__exact": 2 }, "order": ("-guarantee_date", ), "cols": ("brand", "guarantee_date", "service_type"), }] show_detail_fields = ("idc", ) list_editable = ("name", "idc", "guarantee_date", "service_type", "description", "ip") save_as = True aggregate_fields = {"guarantee_date": "min"} grid_layouts = ("table", "thumbnails") form_layout = (Main( TabHolder( Tab( "Comm Fields", Fieldset( "Company data", "name", "idc", description="some comm fields, required", ), Inline(MaintainLog), ), Tab( "Extend Fields", Fieldset( "Contact details", "service_type", Row("brand", "model"), Row("cpu", "core_num"), Row(AppendedText("hard_disk", "G"), AppendedText("memory", "G")), "guarantee_date"), ), ), ), Side(Fieldset("Status data", "status", "ssh_port", "ip"), )) inlines = [MaintainInline] reversion_enable = True data_charts = { "host_service_type_counts": { 'title': u"Host service type count", "x-field": "service_type", "y-field": ("service_type", ), "option": { "series": { "bars": { "align": "center", "barWidth": 0.8, 'show': True } }, "xaxis": { "aggregate": "count", "mode": "categories" }, }, }, }
class HostAdmin(object): model_icon = 'fa fa-cog' def open_web(self, instance): return "<a href='http://%s' target='_blank'>Open</a>" % instance.ip open_web.short_description = "Acts" open_web.allow_tags = True open_web.is_column = True def thumbnail_img(self, obj): return "<img src='http://js.wiyun.com/site_media/images/wallpaper/eac1bce7-90d5-40a7-a7e2-ae02acca2e86_jpg_152x102_crop_upscale_q85.jpg'/>" thumbnail_img.short_description = "TImg" thumbnail_img.allow_tags = True thumbnail_img.is_column = True thumbnail_img.thumbnail_img = True list_display = ('thumbnail_img', 'name', 'idc', 'guarantee_date', 'service_type', 'status', 'open_web', 'description') list_display_links = ('name', ) grid_layouts = ['thumbnails', 'table'] raw_id_fields = ('idc', ) style_fields = {'system': "radio-inline"} search_fields = ['name', 'ip', 'description'] list_filter = [ 'idc', 'guarantee_date', 'status', 'brand', 'model', 'cpu', 'core_num', 'hard_disk', 'memory', 'service_type' ] list_bookmarks = [{ 'title': "Need Guarantee", 'query': { 'status__exact': 2 }, 'order': ('-guarantee_date', ), 'cols': ('brand', 'guarantee_date', 'service_type') }] show_detail_fields = ('idc', ) list_editable = ('name', 'idc', 'guarantee_date', 'service_type', 'description') save_as = True #aggregate_fields = {"guarantee_date": "min"} actions = [ BatchChangeAction, ] batch_fields = ('name', 'idc', 'guarantee_date', 'service_type', 'status', 'description', 'system') form_layout = (Main( TabHolder( Tab( 'Comm Fiels', Fieldset('Company data', 'name', 'idc', description="some comm fields, required"), Inline(MaintainLog), ), Tab( 'Extend Fiedls', Fieldset( 'Contact details', 'service_type', Row('brand', 'model'), Row('cpu', 'core_num'), Row(AppendedText('hard_disk', 'G'), AppendedText('memory', "G")), 'guarantee_date'), ), Tab( 'Comments', Inline(Comment), ), ), ), Side(Fieldset('Status data', 'status', 'ssh_port', 'ip'), )) inlines = [MaintainInline, CommentInline] reversion_enable = True
class HostAdmin(object): def open_web(self, instance): return "<a href='http://%s' target='_blank'>Open</a>" % instance.ip open_web.short_description = "Acts" open_web.allow_tags = True open_web.is_column = True list_display = ('name', 'idc', 'guarantee_date', 'service_type', 'status', 'open_web', 'description') list_display_links = ('name', ) raw_id_fields = ('idc', ) style_fields = {'system': "radio-inline"} search_fields = ['name', 'ip', 'description'] list_filter = [ 'idc', 'guarantee_date', 'status', 'brand', 'model', 'cpu', 'core_num', 'hard_disk', 'memory', ('service_type', xadmin.filters.MultiSelectFieldListFilter) ] list_quick_filter = ['service_type', {'field': 'idc__name', 'limit': 10}] list_bookmarks = [{ 'title': "Need Guarantee", 'query': { 'status__exact': 2 }, 'order': ('-guarantee_date', ), 'cols': ('brand', 'guarantee_date', 'service_type') }] show_detail_fields = ('idc', ) list_editable = ('name', 'idc', 'guarantee_date', 'service_type', 'description') save_as = True aggregate_fields = {"guarantee_date": "min"} grid_layouts = ('table', 'thumbnails') form_layout = (Main( TabHolder( Tab( 'Comm Fields', Fieldset('Company data', 'name', 'idc', description="some comm fields, required"), Inline(MaintainLog), ), Tab( 'Extend Fields', Fieldset( 'Contact details', 'service_type', Row('brand', 'model'), Row('cpu', 'core_num'), Row(AppendedText('hard_disk', 'G'), AppendedText('memory', "G")), 'guarantee_date'), ), ), ), Side(Fieldset('Status data', 'status', 'ssh_port', 'ip'), )) inlines = [MaintainInline] reversion_enable = True data_charts = { "host_service_type_counts": { 'title': u"Host service type count", "x-field": "service_type", "y-field": ("service_type", ), "option": { "series": { "bars": { "align": "center", "barWidth": 0.8, 'show': True } }, "xaxis": { "aggregate": "count", "mode": "categories" }, }, }, }
class WorkspaceAdmin(object): def queryset(self): qs = super(WorkspaceAdmin, self).queryset() if self.request.user.username in PREVILEGED_USER_SETS: return qs else: return qs.filter(user=self.request.user) # readonly_fields = ('user', ) def uniq_name(self, instance): return instance.name + "_" + instance.user.username uniq_name.short_description = "唯一ID" uniq_name.allow_tags = True uniq_name.is_column = True list_editable = ['name', 'summary'] list_display = ( 'name', "user", 'uniq_name', 'summary', 'date_updated', ) fieldsets = [ ("工作组名称", { 'fields': ['name'] }), ('用户', { 'fields': ['user'], 'classes': ['collapse'] }), ] # form_layout = ( # Fieldset("名称", 'name', 'summary'), # Fieldset(None, 'user', 'desc', 'id', **{"style": "display:None"}), # ) inlines = [ ScanTaskInline, ] actions = None # aggregate_fields = {"user_count": "sum", "view_count": "sum"} # refresh_times = (3, 5, 10) form_layout = (Main(TabHolder(Tab( "创建扫描任务", 'name', Inline(ScanTask), ), ), ), Side( Fieldset("名称", 'summary'), Fieldset(None, 'user', 'desc', 'id', **{"style": "display:None"}), )) def save_models(self): instance = self.new_obj request = self.request instance.user = request.user instance.save()
class KnifeAdmin(object): def display_unicode(self, instance): return instance.__unicode__() display_unicode.short_description = _("code") display_unicode.allow_tags = True display_unicode.is_column = True def attributes_values(self, instance): return instance.attributes_values attributes_values.short_description = _("attribute") attributes_values.allow_tags = True attributes_values.is_column = True def product_format(): knife_attributes = KnifeAttribute.objects.values('attribute').annotate( attribute_count=Count('attribute')).order_by('attribute__ext_code') attribute_ids = [ attribute['attribute'] for attribute in knife_attributes ] attribute_functions = [] for attribute_id in attribute_ids: function_name = "attribute_%d_function" % (attribute_id) generate_function_string = ''' def attribute_%d_function(self, instance): attribute_value = instance.knife_attributes.get(attribute_id=%d).value return attribute_value ''' % (attribute_id, attribute_id) attribute_functions.append( [function_name, generate_function_string, attribute_id]) return attribute_functions list_display = ('name', 'desigen_lifetime') list_display = list(list_display) attribute_functions = product_format() product_catalog_attribute = Attribute.objects.all() for i, function in enumerate(attribute_functions): function_name = function[0] generate_function_string = function[1] function_attribute_id = function[2] attribute_name = product_catalog_attribute.get( id=function_attribute_id) short_description_string = "%s.short_description = '%s'" % ( function_name, attribute_name) exec(function[1]) exec(short_description_string) list_display.insert(i + 1, function[0]) list_display = tuple(list_display) model_icon = 'cog' hidden_menu = False list_display_links = ('name', ) list_display_links_details = True list_filter = ['name', 'prefix', 'desigen_lifetime'] search_fields = ['name', 'prefix', 'desigen_lifetime'] Inline(KnifeAttribute) inlines = [KnifeAttributeInline] actions = [BatchBarcodeAction]
class MyUserAdmin(object): # add_form = UserCreationForm # form = CustomUserCreationForm list_display = ('username', 'email', 'is_admin', 'block', 'get_approved_tag', 'login_count', 'bet_count', 'deposit_count', 'withdraw_count', 'bet_count', 'user_action_link', 'user_deposit_channel', 'user_withdraw_channel', 'time_of_registration', 'ftd_time', 'verfication_time', 'modified_time', 'last_login_time', 'last_login_ip') list_filter = ( 'is_admin', 'user_tag', 'useraction__created_time', ) # fieldsets = ( # (None, {'fields': ('username','email','password', 'first_name', 'last_name', 'phone', 'country', 'date_of_birth', 'street_address_1', 'street_address_2', 'city', 'state', 'zipcode', 'block', 'referral_id', 'referred_by', 'reward_points', 'balance', 'active', 'activation_code')}), # ('Permissions', {'fields': ('is_admin', 'is_staff')}) # ) search_fields = ('username', 'email', 'user_tag__name') ordering = ( 'username', 'email', ) # list_editable = 'username' # readonly_fields = ('username',) filter_horizontal = () model_icon = 'fa fa-user fa-fw' inlines = (UserWithTagInline, ) list_per_page = 20 # refresh_times = [3,5] form_layout = (Main( TabHolder( Tab( 'User Info', Fieldset( 'General Info', 'username', 'member_status', 'user_attribute', Row('email', 'phone'), description="User Detail", ), Fieldset( 'Balance', 'main_wallet', 'other_game_wallet', ), Inline(UserWithTag), ), Tab( 'User Detail', Fieldset( 'Last', 'first_name', 'last_name', ), ), )), ) def get_model_form(self, **kwargs): if self.org_obj is None: self.form = UserCreationForm else: self.form = CustomUserChangeForm return super(MyUserAdmin, self).get_model_form(**kwargs) def get_approved_tag(self, obj): user_with_tags = UserWithTag.objects.filter(user=obj, status=1) tag_names = [] for user_with_tag in user_with_tags: tag_names.append(user_with_tag.tag.name) return ', '.join(tag_names) get_approved_tag.short_description = _('User Tag') get_approved_tag.admin_order_field = 'UserWithTag__user' def login_count(self, obj): qs = UserAction.objects.filter(user=obj, event_type=0) return qs.count() login_count.short_description = _("Login") def deposit_count(self, obj): qs = UserAction.objects.filter(user=obj, event_type=3) return qs.count() deposit_count.short_description = _("Deposit") def withdraw_count(self, obj): qs = UserAction.objects.filter(user=obj, event_type=4) return qs.count() withdraw_count.short_description = _("Withdraw") def bet_count(self, obj): qs = UserAction.objects.filter(user=obj, event_type=6) return qs.count() bet_count.short_description = _("Bet") def user_action_link(self, obj): msg = _("More actions for this user") return ('<a href="%s">' + str(msg) + '</a>') % ( DOMAIN + 'xadmin/users/useraction/?_p_user__id__exact=' + str(obj.id)) user_action_link.allow_tags = True user_action_link.short_description = _("User action link") def last_login_ip(self, obj): qs = UserAction.objects.filter(user=obj, event_type=0).order_by('-created_time') if qs.count() == 0: return None return qs[0].ip_addr def save_models(self): obj = self.new_obj super().save_models()
class ChargingPileAdmin(object): """ 充电桩管理 """ list_display = ['name', 'pile_sn', 'pile_type', 'station', 'pile_mode', 'business_mode', 'get_work_status'] list_display_links = ('name',) search_fields = ['pile_sn', 'name', 'pile_type', 'station'] exclude = ["qrcode", 'group'] list_filter = ['pile_type', 'station', 'pile_mode', 'business_mode'] readonly_fields = ['user'] model_icon = 'fa fa-sitemap' show_all_rel_details = False # list_editable = ['pile_type', 'pile_sn'] refresh_times = [3, 5] # 计时刷新 save_as = True style_fields = { "low_restrict": "radio-inline", "low_offset": "radio-inline", "subscribe_status": "radio-inline", "occupy_status": "radio-inline", 'sub_status': "radio-inline", 'charg_mode': "radio-inline", } form_layout = ( Main( TabHolder( Tab( '基础信息设置', Fieldset( '基础信息', Row('name', 'pile_type'), Row('pile_sn', 'power'), Row('station', 'pile_mode'), Row('business_mode', 'fireware'), Row('symbol_4g', 'symbol_eth'), 'charg_mode', 'sub_time', Row('is_subsidy', 'faults'), ), Inline(ChargingGun), css_id="base_info", ), Tab( '其他设置', Fieldset( "预约及占位设置", 'charg_policy', Row('subscribe_status', AppendedText('subscribe_fee', '元')), Row('occupy_status', AppendedText('occupy_fee', '元')), ), Fieldset( "小电流设置参数", Row('low_restrict', AppendedText('low_cur_value', '毫安')), Row('low_offset', AppendedText('low_offset_value', '元')), ), Fieldset( "单枪参数", Row(AppendedText('gun_max_voltage', '伏'), AppendedText('gun_min_voltage', '伏')), Row(AppendedText('gun_max_current', '安'), AppendedText('gun_min_current', '安')), ), css_id="other_set", ), ), ), Side( Fieldset("其他信息", 'sub_status', 'user', 'max_gun', 'restart_nums'), ) ) inlines = [ChargingGunInline] def queryset(self): queryset = super(ChargingPileAdmin, self).queryset() if self.request.user.station: return queryset.filter(station=self.request.user.station) elif self.request.user.seller: return queryset.filter(station__seller=self.request.user.seller) else: return queryset def formfield_for_dbfield(self, db_field, **kwargs): if db_field.name == 'station': if not self.request.user.is_superuser: kwargs['queryset'] = Station.objects.filter(seller=self.request.user.seller) return super(ChargingPileAdmin, self).formfield_for_dbfield(db_field, **kwargs) def save_models(self): obj = self.new_obj request = self.request obj.user = request.user obj.group = request.user.groups.first() super(ChargingPileAdmin, self).save_models() def save_related(self): obj = self.new_obj super(ChargingPileAdmin, self).save_related() for inst in obj.charginggun_set.all(): self.save_image(inst) def save_image(self, instance): upload_path = instance.qrcode.field.upload_to dirs = os.path.join(settings.MEDIA_ROOT, upload_path) if not os.path.exists(dirs): os.makedirs(dirs) domain_url = settings.ROOT_URL if settings.ROOT_URL else "http://" + self.request.get_host() # domain_url = "http://" + self.request.get_host() path = reverse('order-prepay', kwargs={'pile_sn': instance.charg_pile.pile_sn, "gun_num": instance.gun_num}) qrcode_content = '{0}{1}'.format(domain_url, path) image = create_qrcode(qrcode_content) image_url = '{0}_{1}.png'.format(instance.charg_pile.pile_sn, instance.gun_num) image.save(os.path.join(dirs, image_url), quality=100) instance.qrcode = '{0}{1}'.format(upload_path, image_url) instance.save() def station_choices(self, field, request, params, model, model_admin, field_path): if self.request.user.station: stations = Station.objects.filter(id=self.request.user.station.id).values("id", "name") elif self.request.user.seller: stations = Station.objects.filter(seller_id=self.request.user.seller.id).values("id", "name") else: return field.get_choices(include_blank=False) return list(((station.get('id'), station.get('name')) for station in stations))