Fix the "/consumers" api again

Set the consumer_id to a hidden input in the Consumers detail view
This commit is contained in:
JianweiGao 2018-09-24 23:08:56 +08:00
parent 264b9a085c
commit 339ce1359d
3 changed files with 16 additions and 49 deletions

View File

@ -5,18 +5,11 @@ Forms of consumers app
from django import forms
class ApiConsumersForm(forms.Form):
consumer_id = forms.CharField(
label='Consumer ID',
widget=forms.TextInput(
attrs={
'class': 'form-control',
}
),
required=False,
widget=forms.HiddenInput(),
required=True,
)
per_minute_call_limit = forms.IntegerField(

View File

@ -14,6 +14,7 @@
<h2>Params</h2>
<form action="" method="post">
{% csrf_token %}
{{ form.consumer_id }}
{% if form.non_field_errors %}
<div class="alert alert-danger">
{{ form.non_field_errors }}
@ -21,56 +22,44 @@
{% endif %}
<div class="row">
<div class="col-xs-6 col-sm-3">
<div class="col-xs-2 col-sm-2">
{% if form.per_minute_call_limit.errors %}<div class="alert alert-danger">{{ form.per_minute_call_limit.errors }}</div>{% endif %}
<div class="form-group">
{{ form.per_minute_call_limit.label_tag }}
{{ form.per_minute_call_limit }}
</div>
</div>
<div class="col-xs-6 col-sm-3">
<div class="col-xs-2 col-sm-2">
{% if form.per_hour_call_limit.errors %}<div class="alert alert-danger">{{ form.per_hour_call_limit.errors }}</div>{% endif %}
<div class="form-group">
{{ form.per_hour_call_limit.label_tag }}
{{ form.per_hour_call_limit }}
</div>
</div>
<div class="col-xs-6 col-sm-3">
<div class="col-xs-2 col-sm-2">
{% if form.per_day_call_limit.errors %}<div class="alert alert-danger">{{ form.per_day_call_limit.errors }}</div>{% endif %}
<div class="form-group">
{{ form.per_day_call_limit.label_tag }}
{{ form.per_day_call_limit }}
</div>
</div>
<div class="col-xs-6 col-sm-3">
<div class="col-xs-2 col-sm-2">
{% if form.per_week_call_limit.errors %}<div class="alert alert-danger">{{ form.per_week_call_limit.errors }}</div>{% endif %}
<div class="form-group">
{{ form.per_week_call_limit.label_tag }}
{{ form.per_week_call_limit }}
</div>
</div>
</div>
<div class="row">
<div class="col-xs-6 col-sm-6">
<div class="col-xs-2 col-sm-2">
{% if form.per_month_call_limit.errors %}<div class="alert alert-danger">{{ form.per_month_call_limit.errors }}</div>{% endif %}
<div class="form-group">
{{ form.per_month_call_limit.label_tag }}
{{ form.per_month_call_limit }}
</div>
</div>
<div class="col-xs-6 col-sm-6">
{% if form.consumer_id.errors %}<div class="alert alert-danger">{{ form.consumer_id.errors }}</div>{% endif %}
<div class="form-group">
{{ form.consumer_id.label_tag }}
{{ form.consumer_id }}
</div>
</div>
</div>
<button type="submit" class="btn btn-primary">Update Consumer</button>
</form>
</div>

View File

@ -16,6 +16,9 @@ from base.filters import BaseFilter, FilterTime
from .forms import ApiConsumersForm
# import logging
# logger = logging.getLogger(__name__)
class FilterAppType(BaseFilter):
"""Filter consumers by application type"""
@ -71,7 +74,7 @@ class IndexView(LoginRequiredMixin, TemplateView):
urlpath = '/management/consumers'
consumers = api.get(urlpath)
consumers = FilterEnabled(context, self.request.GET)\
.apply(consumers['consumers'])
.apply(consumers['list'])
consumers = FilterAppType(context, self.request.GET)\
.apply(consumers)
consumers = FilterTime(context, self.request.GET, 'created')\
@ -98,36 +101,20 @@ class DetailView(LoginRequiredMixin, FormView):
self.api = API(request.session.get('obp'))
return super(DetailView, self).dispatch(request, *args, **kwargs)
def get_form(self):
"""
Get bound form either from request.GET or initials
We need a bound form because we already send a request to the API
without user intervention on initial request
"""
if self.request.GET:
data = self.request.GET
else:
fields = self.form_class.declared_fields
data = {}
for name, field in fields.items():
if field.initial:
data[name] = field.initial
form = self.form_class(data)
def get_form(self, *args, **kwargs):
form = super(DetailView, self).get_form(*args, **kwargs)
form.fields['consumer_id'].initial = self.kwargs['consumer_id']
return form
def form_valid(self, form):
"""Put limits data to API"""
try:
data = ''
form = ApiConsumersForm(self.request.POST)
if form.is_valid():
data = form.cleaned_data
urlpath = '/management/consumers/{}/consumer/calls_limit'.format(data['consumer_id'])
payload = {
@ -151,7 +138,6 @@ class DetailView(LoginRequiredMixin, FormView):
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
api = API(self.request.session.get('obp'))
try:
urlpath = '/management/consumers/{}'.format(self.kwargs['consumer_id'])
consumer = api.get(urlpath)
@ -161,8 +147,7 @@ class DetailView(LoginRequiredMixin, FormView):
messages.error(self.request, err)
context.update({
'consumer': consumer,
'form': self.get_form()
'consumer': consumer
})
return context