def distribution(request, queryset): action = sys._getframe().f_code.co_name action_name = "分配机柜" queryset = queryset.filter(actived=False) onidc_id = request.user.onidc.id options = Option.objects.filter(actived=True) clients = shared_queryset(Client.objects.filter(actived=True), onidc_id) status = shared_queryset(options.filter(flag='Rack-Status'), onidc_id) styles = shared_queryset(options.filter(flag='Rack-Style'), onidc_id) if request.POST.get('post') and request.POST.getlist('items'): def construct_item(index): obj = queryset.get(pk=int(index)) try: client = int(request.POST.get('client-' + str(index))) except BaseException: client = 0 status = int(request.POST.get(f'status-{index}')) style = int(request.POST.get(f'style-{index}')) expiry_date = request.POST.get(f'expiry_date-{index}') cpower = request.POST.get(f'cpower-{index}') comment = request.POST.get((f'comment-{index}'), None) return obj, client, status, style, expiry_date, cpower, comment for item in request.POST.getlist('items'): obj, client, status, style, expiry_date, cpower, _ = construct_item( item) try: expiry_date = timezone.datetime.strptime( expiry_date, '%Y-%m-%d').date() except BaseException: expiry_date = None o = copy.deepcopy(obj) if client != 0: obj.client_id = client obj.status_id = status obj.style_id = style obj.cpower = cpower obj.expiry_date = expiry_date obj.actived = True obj.save() diffs = diff_dict(serialize_object(o), serialize_object(obj)) log_action(user_id=request.user.pk, content_type_id=get_content_type_for_model(obj, True).pk, object_id=obj.pk, action_flag=action_name, message=json.dumps(list(diffs.keys())), content=json.dumps(diffs)) return None context = construct_context(request, queryset, action, action_name) _extra = dict(clients=clients, status=status, styles=styles) context.update(_extra) return TemplateResponse(request, 'rack/distribution.html', context)
def __init__(self, *args, **kwargs): self.user = kwargs.pop('user', None) super(FormBaseMixin, self).__init__(*args, **kwargs) if 'mark' in self.fields: self.fields['mark'].widget = forms.HiddenInput() if self.user is not None: onidc_id = self.user.onidc_id effective = { 'onidc_id': onidc_id, 'deleted': False, 'actived': True} for field_name in self.fields: field = self.fields.get(field_name) if isinstance( field, (forms.fields.SlugField, forms.fields.CharField)): self.fields[field_name].widget.attrs.update( {'autocomplete': "off"}) if isinstance(field, forms.fields.DateTimeField): self.fields[field_name].widget.attrs.update( {'data-datetime': "true"}) if isinstance(field.widget, forms.widgets.Textarea): self.fields[field_name].widget.attrs.update({'rows': "3"}) if isinstance(field, ( forms.models.ModelChoiceField, forms.models.ModelMultipleChoiceField)): fl = '' if getattr(field.queryset.model, 'mark', False): field.queryset = shared_queryset( field.queryset, onidc_id) if field.queryset.model is Option: _prefix = self._meta.model._meta.model_name _postfix = field_name.capitalize() flag = _prefix.capitalize() + '-' + _postfix fl = flag field_initial = field.queryset.filter( master=True, flag=flag) if field_initial.exists(): field.initial = field_initial.first() else: field.queryset = field.queryset.filter(**effective) mn = field.queryset.model._meta if can_create(mn, self.user) and fl: fk_url = format_html( ''' <a title="点击添加一个 {}"''' ''' href="/new/{}/?flag={}">''' '''<i class="fa fa-plus"></i></a>'''.format( field.label, mn.model_name, fl)) elif can_create(mn, self.user) and not fl: fk_url = format_html( ''' <a title="点击添加一个 {}"''' ''' href="/new/{}">''' '''<i class="fa fa-plus"></i></a>'''.format( field.label, mn.model_name)) else: fk_url = '' field.help_text = field.help_text + fk_url self.fields[field_name].widget.attrs.update( {'class': "form-control"})
def get_or_create_style(name, onidc_id): f = dict(onidc_id=onidc_id, flag='Device-Style', text=name.strip()) qs = shared_queryset(Option.objects.filter(**f), onidc_id) if qs.exists(): instance = qs.first() else: extra = dict(description=name.strip(), creator_id=CreatorId) f.update(**extra) instance = Option.objects.create(**f) return instance
def get_or_create_option(name, onidc_id, flag, create=False): if not name.strip(): instance = None f = dict(onidc_id=onidc_id, flag=flag, text=name.strip()) qs = shared_queryset(Option.objects.filter(**f), onidc_id) if qs.exists(): instance = qs.first() else: if create and name.strip(): extra = dict(description=name.strip(), creator_id=CreatorId) f.update(**extra) instance = Option.objects.create(**f) else: instance = None return instance
def make_rack_statistics(self): data = [] robjects = Rack.objects.filter(onidc_id=self.onidc_id, actived=True) keys = Option.objects.filter(flag__in=['Rack-Style', 'Rack-Status'], actived=True) keys = shared_queryset(keys, self.onidc_id) for k in keys: d = [] query = {k.flag.split('-')[1].lower(): k} c = robjects.filter(**query).count() if c > 0: d.append(force_text(k)) d.append(c) if d: data.append(d) return data
def make_online_statistics(self): data = [] dobjects = Online.objects.filter(onidc_id=self.onidc_id) keys = Option.objects.filter(flag__in=['Device-Style', 'Device-Tags']) keys = shared_queryset(keys, self.onidc_id) for k in keys: d = [] if k.flag == 'Device-Style': c = dobjects.filter(style=k).count() else: c = dobjects.filter(tags__in=[k]).count() if c > 0: d.append(force_text(k)) d.append(c) if d: data.append(d) return data
def get_or_create_client(name, onidc_id): qs = Client.objects.filter(name=name.strip()) if qs.exists(): instance = qs.first() else: f = dict(flag='Client-Style') types = shared_queryset(Option.objects.filter(**f), onidc_id) if types.exists(): default = types.filter(master=True) if default.exists(): style = default.first() else: style = types.first() else: return None, "客户类型不能为空" instance = Client.objects.create(onidc_id=onidc_id, creator_id=CreatorId, name=name.strip(), style=style) return instance, None
def get_options(self): options = Option.objects.filter(actived=True) return shared_queryset(options, self.onidc_id)