1.实现170 的功能
实现一个onlick 的功能 ,点击以后 出现一个框,可以填写availablity ,在选择的时候是默认的空白值!
template 端
实现 下拉框的代码 ,通过 select 的id 进行传输
<div class="form-group col-sm-4" id="insert_value_2">
<label style="margin-top:0px; margin-bottom:0px">Locate the stock:</label>
<select id="insert_value_1" class="form-control" name="insert_value_1" title = "insert_value_1">
{% for availability in availabilities %}
<option value='{{ availability.Unit }}' id='{{availability.Unit}}'>{{availability.Unit}}</option>
{% endfor %}
</select>
</div>
通过request.post.get的方式得到对应的对应的两个值!!,通过form的形式获得前端的下拉框的值,request.POST
里面 是id ,但是为什么是通过方括号的形式呢?? request.POST.get
得到的是单一的值
view 端
a =request.POST.get('newAvailablity')
# 通过post方式得到前端下拉菜单里面的值,
city_pk_list = request.POST['insert_value_1']
template 端
需要修改 html 的样式 ,原则是查看上面的代码,最外面的div 用的是col-sm-4样式,
<div id="new_Availablity" class="col-sm-4" style="display:none">
<div class="form-group" style="margin-top:0px; margin-bottom:0px">
<label style="margin-top:0px; margin-bottom:0px">NEW Stock:</label>
<input type="text" class="form-control" name="newAvailablity" id="newAvailablity" value="newAvailablity"/>
</div>
</div>
<a class="btn btn-primary" style="margin-top:20px" onclick='goclick3()' id ="addAVail">
<span class="entypo-plus-squared"></span> ADD Availability</a>
里面有一个标准的 格式,是 在form 端肯定需要的代码,如果 包含一个类型的 并且type =submit 的时候,他可以自己跳转到对应的form地址 <form id="tenant-form" method='POST' enctype='multipart/form-data' onsubmit="javascript: return submit_confirm();" >
具体怎么跳转呢?? ? 好像没有搞清楚 —-
<div class="row">
<div class="form-actions" style="margin:10px 0 0 15px;">
<input type="submit" class="btn btn-primary" id="submit1" name="submit1" value="{{ ui_setting.Submit }}"></input>
<input type="reset" class="btn btn-default" value="{{ ui_setting.Reset }}"></input>
<input type="button" class="btn" onclick="goBack()" value="{{ ui_setting.Back }}"></input>
</div>
</div>
form 端,增加了两个在 数据库中不存在的列,用在传输的过程中,但是现在这个好像没怎么用到了,等以后使用的时候再说吧
class TenantForm(ModelForm):
class Meta:
model = Tenant
AvailabilityName =forms.CharField(label='AvailabilityName')
AddNewAvailabilityName =forms.CharField(label='AddNewAvailabilityName')
fields = form_setting.form_sets.tenant_form
#+['AvailabilityName','AddNewAvailabilityName']
widgets = {'TenantSettle':forms.Select(choices=tenant_settle_choices),
'TenantStatus':forms.Select(choices=tenant_status_choices)
}
tenant_fields_required = ['TenantName', #'TenantStatus'
'TenantSettle', 'TenantStartDate', 'TenantEndDate']
def __init__(self, *args, **kwargs):
super(TenantForm, self).__init__(*args, **kwargs)
for key in self.fields: self.fields[key].error_messages=my_default_errors
tenant_fields_required = getattr(self.Meta, 'tenant_fields_required', None)
if tenant_fields_required:
for key in self.fields:
if key not in tenant_fields_required:
self.fields[key].required = False
修改location 增加一个函数的方式,下拉框的形式
还没有说清楚 leon
1.pull 一个新的版本 ,
2. 我需要把SSH 的换一下
3. 始终带着brand_id ,理解critcal id, www.sina/11/?a=12, 除了delete,edit 方式的都不需要带着id ,
4.migrate 里面的 0001.initial.py ,
- ManyToMany 的类型,company[brands],
brand__id__exact = int(brand_id)
这边需要理解下 brand __id 而不是用brand.id 的方式,因为 rand__id 是有多个,所以brand.id 是取不到的 ,这样的方式是onetomany 的方式
view_company_contact 的逻辑顺序是
如果传过来的request里面有company_id
if request.GET.get('company_id'):
再去判定传过来的company_id 是不是为空
if company_id:
如果存在,就通过company_id 找到对应的 company ,如果传进来的值为空,就通过brand_id 去查看brand 下面的公司(可能有多个,),
然后得到brand 下 所有公司的 company_contacts 查看 ,
返回对应的message_for_add_result = views.messageProducer(request)
是什么意思?
返回的时候都要带着brand_id ,company_id带着走 ,
return render_to_response('contact/contact_view.html', {'company_contacts':company_contacts,
'company_id':company_id, 'brand_id':brand_id, 'message_for_add_result': message_for_add_result}, context_instance = RequestContext(request))
@login_required
def view_company_contact(request):
brand_id = request.GET.get('brand_id')
if request.GET.get('company_id'):
company_id = request.GET.get('company_id')
if company_id:# ensure not null
companies = [get_object_or_404(Company,pk=int(company_id))] #contains only one object
else:#find by brand_id ,brand__id exact 表示 包含的意思,
companies = Company.objects.filter(brand__id__exact = int(brand_id))
company_id = ""
else:
companies = Company.objects.filter(brand__id__exact = int(brand_id))
company_id = ""
company_contacts = Company_Contact.objects.filter(Q(Company__in = companies))
message_for_add_result = views.messageProducer(request)
return render_to_response('contact/contact_view.html', {'company_contacts':company_contacts,
'company_id':company_id, 'brand_id':brand_id, 'message_for_add_result': message_for_add_result}, context_instance = RequestContext(request))
重用id 判断company_id = “” 是不是为空,如果是空的话,说明你是brand_id ,不允许你add company ,
首先应该判定又没有company_id ,同时我要一直带着brand_id ,
form = Company_Contact_Form()
1 第一次进入输入界面,需要传一个空的数据
2request.method == 'POST':
表示你提交的动作,当一个按钮是submit 的时候,url 不变,重新通过路由- 如果提交失败,
form = Company_Contact_Form(request.POST)
表示用户提交的值,然后判定是不是符合form的定义 - 4.
form.is_valid(): 表示数据是正确的
form.save()
HttpResponseRedirect
会改变用户的brand_id,company_id,但是render_to_response
@login_required
def add_company_contact(request):
company_id = request.GET.get('company_id') company_instance=get_object_or_404(Company,pk=int(company_id))
brand_id = request.GET.get('brand_id')
form = Company_Contact_Form()
if request.method == 'POST':
form = Company_Contact_Form(request.POST)
if form.is_valid():
company_contact_instance = Company_Contact.objects.create(Company=company_instance)
form = Company_Contact_Form(request.POST, instance=company_contact_instance)
form.save()
return HttpResponseRedirect("/contact/view_contact/?company_id=%s&brand_id=%s&message=success" % (company_id,brand_id))
message_for_add_result = "fail"
return render_to_response('contact/contact_add.html', {'form': form, 'company_id':company_id, 'message_for_add_result': message_for_add_result}, context_instance = RequestContext(request))
message_for_add_result = "null"
return render_to_response('contact/contact_add.html', {'form': form, 'company_id':company_id, 'message_for_add_result': message_for_add_result}, context_instance = RequestContext(request))
edit_company_contact得到的方式是这样子的,
form=Company_Contact_Form(instance=company_contact_instance)
初始化 需要编辑界面的值,
if request.method == 'POST':
表示提交了表单,
form = Company_Contact_Form(request.POST, instance=company_contact_instance)
表示重新加载了表单,然后
@login_required
def edit_company_contact(request, contact_id):
company_contact_instance=get_object_or_404(Company_Contact,pk=int(contact_id))
company_id = company_contact_instance.Company.id
brand_id = request.GET.get('brand_id')
form = Company_Contact_Form(instance=company_contact_instance)
if request.method == 'POST':
form = Company_Contact_Form(request.POST, instance=company_contact_instance)
if form.is_valid():
company_contact_instance=form.save()
company_contact_instance.save()
if request.GET.get('company_id'):
return HttpResponseRedirect("/contact/view_contact/?company_id=%s&brand_id=%s&message=success" % (company_id,brand_id))
else:
return HttpResponseRedirect("/contact/view_contact/?brand_id=%s&message=success" % brand_id)
message_for_add_result = "fail"
return render_to_response('contact/contact_add.html', {'form': form, 'message_for_add_result': message_for_add_result}, context_instance = RequestContext(request))
message_for_add_result = "null"
return render_to_response('contact/contact_add.html', {'form': form, 'message_for_add_result': message_for_add_result}, context_instance = RequestContext(request))
delete ,return HttpResponseRedirect("/contact/view_contact/?brand_id=%s&message=success" % brand_id)
最后一句传参数是为了回到原来的brand_id 的方式
@login_required
def delete_company_contact(request, contact_id):
brand_id = request.GET.get('brand_id')
company_contact_instance=get_object_or_404(Company_Contact,pk=int(contact_id))
company_id = company_contact_instance.Company.id
company_contact_instance.delete()
if request.GET.get('company_id'):
return HttpResponseRedirect("/contact/view_contact/?company_id=%s&brand_id=%s&message=success" % (company_id,brand_id))
else:
return HttpResponseRedirect("/contact/view_contact/?brand_id=%s&message=success" % brand_id)