5.26 JLL--实习日志--Primary_Image+total_setting

来源:互联网 发布:语句sql2000创建数据库 编辑:程序博客网 时间:2024/05/21 09:29

debug for different Users

  1. primary_image 图片选取!!涉及到的函数是view_property 的change_file_image_flag和add_files的两个函数!
    首先在数据库层面的property里面的加一个列,并且设置默认的值是
    default_building_pic
image_path = models.CharField('图片路径',max_length=255, default="default_building_pic.jpg")

然后在add_files函数里面加上判定的步骤!,代码如下

def add_files(request, property_id):    if request.method == 'POST':             form = UploadFileFormChoice(request.POST, request.FILES) # get post             if form.is_valid():                file_type =request.POST['property_form_type_choice']#从form表单里面得到类型                 now_time = datetime.datetime.utcnow()                yesterdaytime = now_time + datetime.timedelta(days=-1)                userid  = User.objects.filter(id=request.user.id).first().id                #为什么这边要取第一个?                property_instance=Property.objects.all().first()                #request.user通过获取到对应的user_role_instance的对象                user_role_instance = UserRole.objects.filter(user=request.user).first().userRole                propertyfiles_count = PropertyFile.objects.filter(Q(Property_File_Timestamp__gt=yesterdaytime)&Q(Q(UploadBy=userid)|Q(DeleteBy=userid))).count()                #用来判定是不是primary_image_instance是不是存在?判定的标准是photo类型的,并且没有过期的同时primary_image_flag是存在的PropertyFile类型的                primary_image_instance=PropertyFile.objects.filter(Q(Property=property_instance) & Q(Property_File_Type = 'PHO') & Q(RecordEndDate="NULL") & Q(primary_image_flag="1"))                #primary_image_instance primary image exist ?                if(propertyfiles_count < 500):                    if request.FILES.getlist('file'):                        for file_item in request.FILES.getlist('file'):                         #为什么这边是需要循环的?                            property_instance = get_object_or_404(Property,pk=int(property_id))                            file_name_original = file_item.name                            file_name_extension = file_item.name.split('.')[-1].lower()                            #file_name 拼接实现是为了存放在系统中固定的位置!                            file_name = file_type + '_' + property_id + '_' + datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S_%f") + '.' + file_name_extension                            file_item.name = file_name                            record_start_date=now_time                            if primary_image_instance:                            #如果存在那就把property_file 的image_flag设置为0,如果没有,那就还要判定传入进来的文件是不pho类型的如果是,那就把最新传进来的文件设置为primary_image!如果不是pho类型,那就仍然设置为0,感觉总是涉及到property类型的!                                image_flag = '0'                            elif file_type == 'PHO':                                image_flag = '1'                                #这边还需要加上first()??                                property_instance.image_path = PropertyFile.objects.filter(Q(Property=property_instance) & Q(Property_File_Type = 'PHO') & Q(RecordEndDate="NULL") & Q(primary_image_flag="1")).first().Property_File_Path                                property_instance.save()                            else:                                image_flag ='0'                            #如果没有那就创建一个property_file 对象并且给里面赋值                            property_file = PropertyFile(Property=property_instance, Property_File=file_item, Property_File_Path=file_name, Property_File_Name = file_name_original, Property_File_Type = file_type, Property_File_Subpart = file_name_extension, RecordStartDate=record_start_date, view_flag = user_role_instance, control_flag = user_role_instance, UploadBy = userid, primary_image_flag = image_flag)                            #保存对象到数据库!                            property_file.save()                            views.write_operation_log(property_file, "Add", request)                    return HttpResponseRedirect("/property/view_detail/%s?message=success&item=files" % property_id)                 else:                    return HttpResponseRedirect("/property/view_detail/%s?message=fail&item=files" % property_id)            else:                return HttpResponseRedirect("/property/view_detail/%s?message=fail&item=files" % property_id)    else:        return HttpResponseRedirect("/property/view_detail/%s?message=fail&item=files" % property_id)

在view_property 里面的两个函数需要添加default_image的步骤,给propety这个函数添加image_path的属性!
在add_files函数中,如果存在primary_image_instance对象的,那就会把新传入的对象的image_path属性设置为默认的,如果没有就用property_file里面的Property_File_Path赋值给property 里面的 image_path值!

primary_image_instance=PropertyFile.objects.filter(Q(Property=property_instance) & Q(Property_File_Type = 'PHO') & Q(RecordEndDate="NULL") & Q(primary_image_flag="1"))

2 change_file_image_flag改变显示图片的功能!同时去改变对应的 property_instance里面的image_path !

def change_file_image_flag(request, file_id):    property_file_instance = get_object_or_404(PropertyFile,pk=int(file_id),RecordEndDate="NULL")    property_instance = property_file_instance.Property#property_instance     property_id = property_instance.id    if not can_control(property_file_instance, request):         return views.page_not_found(request)    else:        primary_images = PropertyFile.objects.filter(Q(Property=property_instance)&Q(RecordEndDate='NULL')&Q(primary_image_flag='1'))        if primary_images:#exist primary_image,change other image flag and then change the instance for 1             for item in primary_images:                item.primary_image_flag = '0'                item.save()        property_file_instance.primary_image_flag = '1'        property_file_instance.save()        property_instance.first().image_path = PropertyFile.objects.filter(Q(Property=property_instance.first()) & Q(Property_File_Type = 'PHO') & Q(RecordEndDate="NULL") & Q(primary_image_flag="1")).first().Property_File_Path        property_instance.save()        views.write_operation_log(property_file_instance, "Edit", request)        return HttpResponseRedirect("/property/view_detail/%s?message=success&item=files" % property_id)

2. 增加image_path还可以是在改变primary_image的图片时候需要改动
功能设置的位置图片

具体实现的代码

def change_file_image_flag(request, file_id): #通过file_id和对象的类型找到property_file_instance,感觉传入的id 还是很重要的      property_file_instance = get_object_or_404(PropertyFile,pk=int(file_id),RecordEndDate="NULL")    #因为file关联到property_instance上所以可以找到对应的 property_instance     property_instance = property_file_instance.Property    property_id = property_instance.id    if not can_control(property_file_instance, request):         return views.page_not_found(request)    else:    #通过判断Property,endDate,primary_image_flag是不是已经有primary_images        primary_images_instance = PropertyFile.objects.filter(Q(Property=property_instance)&Q(RecordEndDate='NULL')&Q(primary_image_flag='1'))        if primary_images:        #exist primary_image,change other image flag and then change the instance for 1            for item in primary_images:                item.primary_image_flag = '0'                item.save()        property_file_instance.primary_image_flag = '1'        property_file_instance.save()        #同时改变property_instance对应的image_path里面的路径名称        property_instance.image_path = PropertyFile.objects.filter(Q(Property=property_instance) & Q(Property_File_Type = 'PHO') & Q(RecordEndDate="NULL") & Q(primary_image_flag="1")).first().Property_File_Path        property_instance.save()        views.write_operation_log(property_file_instance, "Edit", request)        return HttpResponseRedirect("/property/view_detail/%s?message=success&item=files" % property_id)

total_setting

对象的形式传过来!不是用string 的类型传过来!
这样的方式已经解决了! 使用的是一个列表的形式进行优化的!
total_setting是一个总的开关,达到的效果是指需要total_setting里面改,所有的setting都会变动!

OrderedDict 实现了一个有序list 的概念

from collections import OrderedDict

遇到的问题是没有办法传对象类型过来policy_jp_ind 和policy_xuhui_gov 这两个只能是以字符串的形式传过来!所以用的
以下的方式进行调整!

import total_settingfrom collections import OrderedDict# Load specific policy herepolicy_list = OrderedDict()policy_list[0]=policy_jp_indpolicy_list[1]=policy_xuhui_govpolicy = policy_list[total_setting.environment_setting]

系统部件的熟悉

static—-upload —上传文件的地方!