Data Version Control - Solid StartDate - EndDate
python manage.py makemigrations 和) python manage.py migrate语句记不住!
get/post 传递方式的区别是什么?
问题描述:
问题分析:
从Url上面就可以发现已经跳转了,问题不是在edit ,edit 里面有个正则表达式,<> 表示只可以是management_id 这个变量 d+ 表示数字变量的。。。。
(?P<management_id>\d+)
form.save()
- 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))
需要解决的问题
- 加上了一句判断语句不知道业务上是不是正确的???
@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))