6.20 JLL--实习日志-- teneat关联Availabilty,retail 增删改插的函数理解

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>&nbsp;&nbsp;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 ,

  1. 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))
  1. 重用id 判断company_id = “” 是不是为空,如果是空的话,说明你是brand_id ,不允许你add company ,

  2. 首先应该判定又没有company_id ,同时我要一直带着brand_id ,form = Company_Contact_Form()
    1 第一次进入输入界面,需要传一个空的数据
    2 request.method == 'POST': 表示你提交的动作,当一个按钮是submit 的时候,url 不变,重新通过路由

  3. 如果提交失败,form = Company_Contact_Form(request.POST) 表示用户提交的值,然后判定是不是符合form的定义
  4. 4.form.is_valid(): 表示数据是正确的
  5. form.save()
  6. 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)  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值