view_extension
主要的业务逻辑!
model 层面 实现一个 Property_Extension ,form层面也是实现对应的Property_Extension的,这个form_4 是在add_Property层面的时候初始化,并且保存save!然后在edit 界面 实现一个修改的功能!
views_extension没有办法初始化值!extension 的数据库里面没有数据 !因为没有初始化的值,所以执行edit 的时候没有办法执行成功!
add_property 初始化form_4
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>
- 列表内容
HttpResponseRedirect 给我感觉可以再次回到url那边进行设定!
HttpResponseRedirect("/property/view/?message=success")
- 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))
- form is_valid False 问题原因是 里面少了参数 :request.POST !!
PropertyExtensionForm(request.POST,instance=property_extension_instance)
if form_4.is_valid():
property_to_update = form_4.save()
- 理解逻辑!
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
- 问题描述! 在界面利用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)
- 完整代码!
@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))