5.23 JLL--实习日志--PropertyExtension和string_float问题

本文介绍了一个基于Django框架的复杂表单编辑流程,包括如何初始化表单、处理POST请求、验证数据及保存更新等内容。同时,还探讨了解决form表单无法正确初始化值、数据保存失败等问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

view_extension

主要的业务逻辑!
model 层面 实现一个 Property_Extension ,form层面也是实现对应的Property_Extension的,这个form_4 是在add_Property层面的时候初始化,并且保存save!然后在edit 界面 实现一个修改的功能!

views_extension没有办法初始化值!extension 的数据库里面没有数据 !因为没有初始化的值,所以执行edit 的时候没有办法执行成功!
add_property 初始化form_4

  1. view_extension里面的问题
    初始化的数据是可以显示的!
    初始化view_extension 以后没有办法存进去数据!

    存进去以后的数据也没有办法在view_detail 那边显示!

为什么这边的submit 可以和直接提交成功?
是不是form 里面的id有什么讲究??

  <form id="PropertyExtensionForm-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>
  1. 列表内容
    HttpResponseRedirect 给我感觉可以再次回到url那边进行设定!
HttpResponseRedirect("/property/view/?message=success")
  1. request GET 并不是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 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():
                property_to_update = form_4.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))
  1. form is_valid False 问题原因是 里面少了参数 :request.POST !!
PropertyExtensionForm(request.POST,instance=property_extension_instance)
            if form_4.is_valid():
                property_to_update = form_4.save()
  1. 理解逻辑!
    4.1 首先 在views 里面 add_property 生成四个form ,前三个form 是为了add2.html 填写的表格!第四个form_4是为了以后用到在这边备用的!
    4.2 第一步 有什么用?form_1,form_2,form_3 在后面还是会使用到
    在最后的null 的地方直接返回空的表单进行返回!,代码如下
form_1 = PropertyForm()
    form_2 = PropertyFacilityForm()
    form_3 = PropertyLandlordForm()

如果是message_for_add_result = “null” 情况的时候

  message_for_add_result = "null"
    return render_to_response('property/add2.html', {'form_1': form_1, 'form_2': form_2,  'form_3': form_3,'message_for_add_result': message_for_add_result, "data":mark_safe(data)}, context_instance = RequestContext(request))

4.3 第二步,可以通过form_1.save()的方式生成一个对象!

 instance = form_1.save()

4.3 第三步,给instance 对象进行赋值,这个赋值?最后一个步骤,instance.save()?

instance = form_1.save()
            instance.RecordStartDate = timezone.now()
            instance.Latitude = instance.Latitude
            instance.RecordEndDate = "NULL"
            user_role_instance = UserRole.objects.filter(user=request.user).first().userRole
            submarket_cluster_instance = UserRole.objects.filter(user=request.user).first().submarketCluster
            instance.view_flag = user_role_instance
            instance.control_flag = user_role_instance
            instance.SubmarketCluster = center_value_list.get(submarket_cluster_instance)
            instance.save()

5 第五步,给form_2和form_3 进行初始化步骤!!

form_2 = PropertyFacilityForm(request.POST, instance=instance)
            form_3 = PropertyLandlordForm(request.POST, instance=instance)

6 第六步,form_4 的初始化是不一样的 !因为之前的form_2和form_3 在定义form那里都是 model = Property 的形式! 所以可以直接利用 instance = form_1.save()的形式! 但是form_4的在定义的时候用的是model = Property_Extension 和property是没有任何关系的! 所以需要重新定一个instance =Property_Extension
property_extension_instance.Property = instance 利用了properety 外键建立联系!然后对form_4 进行赋值操作

 property_extension_instance = Property_Extension()
            property_extension_instance.Property = instance
            #property_extension_instance.Address
            property_extension_instance.save()
            form_4 = PropertyExtensionForm(request.POST, instance=property_extension_instance)
            form_4.Address = instance.StreetFrom
            form_4.Property_Name =instance.NameUnicode
            form_4.Leasable_Area =''
            form_4.Office_Floor_Rent_Per_Tsubo = ''
            form_4.Monthly_Rent = ''
            form_4.Access_Nearest_IC = ''
            form_4.Access_Nearest_Station=''
            form_4.Delivery_Date_Comment = ''
            form_4.Delivery_Date_Comment_Year= ''
            form_4.Delivery_Date_Comment_Month = ''
            form_4.Delivery_Date_Comment_Day = ''
            form_4.Broker_Comment = ''

7 第七步,对于所有的 form 进行一个save的操作

 if form_2.is_valid() and form_3.is_valid() and form_4.is_valid():
                form_2.save()
                form_3.save()
                form_4.save()
                views.write_operation_log(instance, "Add", request)
                return HttpResponseRedirect("/property/view/?message=success")
        message_for_add_result = "fail"

8 第8步完整代码如下

@login_required
def add_property(request):
    form_1 = PropertyForm()
    form_2 = PropertyFacilityForm()
    form_3 = PropertyLandlordForm()
    #init form_4 for edit 
    data = auto_complete_Test()
    if request.method == 'POST':
        form_1 = PropertyForm(request.POST)
        form_2 = PropertyFacilityForm(request.POST)
        form_3 = PropertyLandlordForm(request.POST)
        if form_1.is_valid():
            property_to_add = Property(form_1.cleaned_data)
            if Property.objects.filter(Q(NameUnicode=property_to_add.NameUnicode) & Q(RecordEndDate="NULL")).count() > 0:
                message_for_add_result = "fail"
                return render_to_response('property/add2.html', {'form_1': form_1, 'form_2': form_2,  'form_3': form_3, 'message_for_add_result': message_for_add_result, "data":mark_safe(data)}, context_instance = RequestContext(request))
            instance = form_1.save()
            instance.RecordStartDate = timezone.now()
            instance.Latitude = instance.Latitude
            instance.RecordEndDate = "NULL"
            user_role_instance = UserRole.objects.filter(user=request.user).first().userRole
            submarket_cluster_instance = UserRole.objects.filter(user=request.user).first().submarketCluster
            instance.view_flag = user_role_instance
            instance.control_flag = user_role_instance
            instance.SubmarketCluster = center_value_list.get(submarket_cluster_instance)
            instance.save()
            form_2 = PropertyFacilityForm(request.POST, instance=instance)
            form_3 = PropertyLandlordForm(request.POST, instance=instance)
            property_extension_instance = Property_Extension()
            property_extension_instance.Property = instance
            #property_extension_instance.Address
            property_extension_instance.save()
            form_4 = PropertyExtensionForm(request.POST, instance=property_extension_instance)
            #form_4.property = instance.property
            form_4.Address = instance.StreetFrom
            form_4.Property_Name =instance.NameUnicode
            form_4.Leasable_Area =''
            form_4.Office_Floor_Rent_Per_Tsubo = ''
            form_4.Monthly_Rent = ''
            form_4.Access_Nearest_IC = ''
            form_4.Access_Nearest_Station=''
            form_4.Delivery_Date_Comment = ''
            form_4.Delivery_Date_Comment_Year= ''
            form_4.Delivery_Date_Comment_Month = ''
            form_4.Delivery_Date_Comment_Day = ''
            form_4.Broker_Comment = ''
            if form_2.is_valid() and form_3.is_valid() and form_4.is_valid():
                form_2.save()
                form_3.save()
                form_4.save()
                views.write_operation_log(instance, "Add", request)
                return HttpResponseRedirect("/property/view/?message=success")
        message_for_add_result = "fail"
        return render_to_response('property/add2.html', {'form_1': form_1, 'form_2': form_2,  'form_3': form_3,'message_for_add_result': message_for_add_result,  "data":mark_safe(data)}, context_instance = RequestContext(request))
    message_for_add_result = "null"
    return render_to_response('property/add2.html', {'form_1': form_1, 'form_2': form_2,  'form_3': form_3,'message_for_add_result': message_for_add_result, "data":mark_safe(data)}, context_instance = RequestContext(request))

9.修改property_Extension的form表单的操作! 这个model 是和Property没有任何关系的!只是一个form 传递修改值的功能!
9.1 首先是生成一个instance ,注意filter这个生成的是list 类型,所以要first() 变化类型的,这里面是有两步骤的:先生成一个property 类型然后由property 生成 property_extension_instance !

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()

9.2 利用instance生成form_4 表单,这边也是为了保险,主要是为了message_for_add_result = “null”的时候可以有form_4 表单传过去!

 form_4 = PropertyExtensionForm(instance=property_extension_instance)
     form_4 = PropertyExtensionForm(request.POST,instance=property_extension_instance)

9.3 is_valid()的问题!如果没有就会报错!

if form_4.is_valid():
                property_to_update = form_4.save()
                views.write_operation_log(property_to_update, "Edit", request)
                return HttpResponseRedirect("/property/view_detail/%s?message=success" % property_id)
            message_for_a

完整的代码:

@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 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():
                property_to_update = form_4.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))

Float_to_String

  1. 问题描述! 在界面利用GET 方法传入后台的时候是三个String类型数字,两个是数字,一个是文字
if request.method == 'GET':
        value_lower = float(request.GET.get('a'))
        value_upper = float(request.GET.get('b'))
        innerfilter = request.GET.get('c')

2.首先应该是判定innerfilter是不是空值,否则就把所有的Property_instance 都输出来!里面有一个__icontains是Django 特定的类似于模糊查询的方式!

if not innerfilter:
            properties_instance = Property.objects.all()
        else:
            properties_instance  = Property.objects.filter(NameUnicode__icontains=innerfilter)

3.进行比较!P**roperty 里面有一个UnitRental 里面有可能是空!所以首先要去处理空的情况!把这个空变成0 item.UnitRental = ‘0’,然后 再进行比较!里面有一个**exclude 的方法是 exclude(id=item.id)!比较的方式必须是id???

for item in availabilities:
            if not item.UnitRental == "":
                if float(item.UnitRental) < value_lower or float(item.UnitRental) > value_upper:
                    availabilities = availabilities.exclude(id=item.id)
            else:
                item.UnitRental = '0'
                if float(item.UnitRental) < value_lower or float(item.UnitRental) > value_upper:    
                    availabilities = availabilities.exclude(id=item.id)
  1. 完整代码!

@login_required
def search_form(request):
    if request.method == 'GET':
        value_lower = float(request.GET.get('a'))
        value_upper = float(request.GET.get('b'))
        innerfilter = request.GET.get('c')
        if not innerfilter:
            properties_instance = Property.objects.all()
        else:
            properties_instance  = Property.objects.filter(NameUnicode__icontains=innerfilter)
        availabilities = Availability.objects.filter(Property__in=properties_instance)#&Q(UnitRental__gt=value_lower)&Q(UnitRental__lt=value_upper))
        for item in availabilities:
            if not item.UnitRental == "":
                if float(item.UnitRental) < value_lower or float(item.UnitRental) > value_upper:
                    availabilities = availabilities.exclude(id=item.id)
            else:
                item.UnitRental = '0'
                if float(item.UnitRental) < value_lower or float(item.UnitRental) > value_upper:    
                    availabilities = availabilities.exclude(id=item.id)
    return render_to_response('availability/view.html', {'availabilities': availabilities}, context_instance = RequestContext(request))   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值