5.31 JLL--实习日志--EDIT 过期数据+2个问题

Data Version Control - Solid StartDate - EndDate

  1. python manage.py makemigrations 和) python manage.py migrate语句记不住!

  2. get/post 传递方式的区别是什么?
    问题描述:
    显示错误报404
    问题分析:
    从Url上面就可以发现已经跳转了,问题不是在edit ,edit 里面有个

  3. 正则表达式,<> 表示只可以是management_id 这个变量 d+ 表示数字变量的。。。。

(?P<management_id>\d+)



form.save()

  1. form.save() 和instance.save() 的区别!
    !!永远不要去改变form传过来的值!!!正确的是先form.save() 然后instance.save()
    注意在edit 里面的逻辑顺序
    下面实现的功能是把edit 的数据变成过期数据,主要的步骤是

4.1 首先是生成一个old 的数据,传入的数据是tenant_id 通过 get_object_or_404(Tenant,pk=int(tenant_id),找到对应的instance 对象

tenant_instance=get_object_or_404(Tenant,pk=int(tenant_id),RecordEndDate="NULL")

4.2是进行一个权限的判定can_control

 if not can_control(tenant_instance, request): 
        return views.page_not_found(request)

4.3如果有权限就先生成一个instance 形式的form表单,是为了后面null 操作做准备,

else:
        form = TenantForm(instance=tenant_instance)

4.4一个post 的表单验证,这边总是会变成get类型,生成的form是原来旧数据形成的!验证POST 的理由是什么呢?然后再生成一个form 并且验证form的有效性

 if request.method == 'POST':
    form =TenantForm(request.POST,instance=tenant_instance) 
            if form.is_valid():

4.5生成一个update 类型的新数据,同时把这条新数据保存到数据库中去,都是通过instance 的形式进行保存,这边给update 的形式需要注意本来是用create 的形式创建的,
但是leon给了一个更加简便的方法,pk=null 的形式给出就可以了

tenant_instance_update = tenant_instance
                # copy instance_update
                property_id = tenant_instance_update.Property.id
tenant_instance_update.pk = None
tenant_instance_update.save()

4.6 过期旧数据以后得到并且保存到数据库中去,这边感觉所有的数据存入数据库都是用对象的形式!没有用form.save()的形式

tenant_instance.RecordEndDate = timezone.now()
tenant_instance.save()

4.7通过用户传来的信息更改数据得到新的form,然后再保存数据!这里需要通过form的形式进行改变!!!!会形成新的数据存入数据库!request.POST 这句话的目的就是把form拿来的值改变后传入数据库
tenant_to_update = form.save()这句话有两个功能,存入数据同时还可以记录update 的动作

form = TenantForm(request.POST,instance=tenant_instance_update) 
tenant_to_update = form.save()

完整的代码如下

@login_required
def edit_tenant(request, tenant_id):
    #get old record-tenant_instance 
    tenant_instance=get_object_or_404(Tenant,pk=int(tenant_id),RecordEndDate="NULL")
    if not can_control(tenant_instance, request): 
        return views.page_not_found(request)
    else:
        #get old instance for null step
        form = TenantForm(instance=tenant_instance)
        if request.method == 'POST':
            form = TenantForm(request.POST,instance=tenant_instance) 
            if form.is_valid():
                #form check 
                tenant_instance_copy = tenant_instance
                # copy instance_update
                property_id = tenant_instance_update.Property.id
                tenant_instance_copy.pk = None
                tenant_instance_copy.save()
                #save the new tenant object
                tenant_instance.RecordEndDate = timezone.now()
                tenant_instance.save()
                #RecordEndDate the old one 

                form = TenantForm(request.POST,instance=tenant_instance_copy) 
                tenant_to_update = form.save()
                #update the form and save the new record 
                views.write_operation_log(tenant_to_update, "Edit", request)
                return HttpResponseRedirect("/property/view_detail/%s?message=success&item=tenant" % property_id)
            message_for_add_result = "fail"
            return render_to_response('tenant/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('tenant/add.html', {'form': form, 'message_for_add_result': message_for_add_result}, context_instance = RequestContext(request))

需要解决的问题

  1. 加上了一句判断语句不知道业务上是不是正确的???
@login_required
def view_availability(request):
    availabilities = Availability.objects.filter(RecordEndDate="NULL").order_by('UpdateDate')
    message_for_add_result = "null"
    if request.GET.get('message'):
        message_for_add_result = request.GET.get('message')
    for availability in availabilities:
        if not can_access(availability, request):
            availabilities=availabilities.exclude(id=availability.id)
        elif not availability.Property.RecordEndDate== 'NULL':
            availabilities=availabilities.exclude(id=availability.id)
        else:
            availability.AvailableDate = str(availability.AvailableDate)
    return render_to_response('availability/view.html', {'availabilities': availabilities, 'message_for_add_result': message_for_add_result}, context_instance = RequestContext(request))    

2view_detail 最后一个格子没有办法正常显示???
初步显示是一个post 类型的错误! 为什么感觉没有错啊!!!!

@login_required
def edit_property_extension(request, property_id):
    form_4 = PropertyExtensionForm()
    property_instance=get_object_or_404(Property,pk=int(property_id),RecordEndDate="NULL")
    property_extension_instance=Property_Extension.objects.filter(Q(Property=property_instance)).first()
    if not property_extension_instance:
        property_extension_instance = Property_Extension(Property=property_instance)
    if not can_control(property_instance, request):
        return views.page_not_found(request)
    else:
        form_4 = PropertyExtensionForm(instance=property_extension_instance)
        if request.method == 'POST':
            form_4 = PropertyExtensionForm(request.POST,instance=property_extension_instance)
            if form_4.is_valid():
                print '2'
                property_to_update = form_4.save()
                property_to_update.Delivery_Date_Comment = property_to_update.Delivery_Date_Comment_Year  + u'年' + property_to_update.Delivery_Date_Comment_Month + u'月' + property_to_update.Delivery_Date_Comment_Day
                property_to_update.save()
                views.write_operation_log(property_to_update, "Edit", request)
                return HttpResponseRedirect("/property/view_detail/%s?message=success" % property_id)
            message_for_add_result = "fail"
            return render_to_response('property/input_property_extension.html', {'form_4': form_4, 'message_for_add_result': message_for_add_result}, context_instance = RequestContext(request))
        message_for_add_result = "null"
        return render_to_response('property/input_property_extension.html', {'form_4': form_4, 'message_for_add_result': message_for_add_result}, context_instance = RequestContext(request))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值