| @@ -0,0 +1,19 @@ | ||
| 1 | +# -*- coding: utf-8 -*- | |
| 2 | +# Generated by Django 1.11.28 on 2020-03-04 10:26 | |
| 3 | +from __future__ import unicode_literals | |
| 4 | + | |
| 5 | +from django.db import migrations | |
| 6 | + | |
| 7 | + | |
| 8 | +class Migration(migrations.Migration): | |
| 9 | + | |
| 10 | + dependencies = [ | |
| 11 | +        ('integral', '0013_saleclerksubmitloginfo_is_staff_delete'), | |
| 12 | + ] | |
| 13 | + | |
| 14 | + operations = [ | |
| 15 | + migrations.AlterModelOptions( | |
| 16 | + name='saleclerksubmitloginfo', | |
| 17 | +            options={'verbose_name': '\u9500\u552e\u5458\u626b\u7801\u51fa\u5e93\u8bb0\u5f55', 'verbose_name_plural': '\u9500\u552e\u5458\u626b\u7801\u51fa\u5e93\u8bb0\u5f55'}, | |
| 18 | + ), | |
| 19 | + ] | 
| @@ -8,7 +8,7 @@ from django_admin import AdvancedActionsModelAdmin, AdvancedExportExcelModelAdmi | ||
| 8 | 8 | from django_models_ext import ProvinceShortModelMixin | 
| 9 | 9 | from pysnippets.strsnippets import strip | 
| 10 | 10 |  | 
| 11 | -from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, | |
| 11 | +from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, CameraModelInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, | |
| 12 | 12 | LatestAppInfo, LatestAppScreenInfo, ModelInfo, ModelCameraBodyInfo, OperatorInfo, SaleclerkInfo) | 
| 13 | 13 | from utils.redis.rshot import update_member_shot_data | 
| 14 | 14 |  | 
| @@ -83,14 +83,60 @@ class ModelInfoAdmin(DeleteModelAdmin, admin.ModelAdmin): | ||
| 83 | 83 |  | 
| 84 | 84 | update_member_shot_data() | 
| 85 | 85 |  | 
| 86 | + # 更新"型号机身适配"型号图片 | |
| 87 | + ModelCameraBodyInfo.objects.filter( | |
| 88 | + brand_id=obj.brand_id, | |
| 89 | + model_name=obj.model_name, | |
| 90 | + ).update( | |
| 91 | + model_image=obj.model_image, | |
| 92 | + ) | |
| 93 | + | |
| 86 | 94 | def delete_model(self, request, obj): | 
| 87 | 95 | obj.delete() | 
| 88 | 96 | update_member_shot_data() | 
| 89 | 97 |  | 
| 98 | + # 更新"型号机身适配"型号图片 | |
| 99 | + ModelCameraBodyInfo.objects.filter( | |
| 100 | + brand_id=obj.brand_id, | |
| 101 | + model_name=obj.model_name, | |
| 102 | + ).update( | |
| 103 | + model_image=None, | |
| 104 | + ) | |
| 105 | + | |
| 106 | + | |
| 107 | +class CameraModelInfoAdmin(admin.ModelAdmin): | |
| 108 | +    list_display = ('brand_id', 'brand_name', 'camera_brand_name', 'camera_name', 'camera_image', 'status', 'created_at', 'updated_at') | |
| 109 | +    list_filter = ('brand_name', 'camera_brand_name', 'status') | |
| 110 | + | |
| 111 | + def save_model(self, request, obj, form, change): | |
| 112 | + obj.save() | |
| 113 | + | |
| 114 | + # 更新"型号机身适配"机身图片 | |
| 115 | + ModelCameraBodyInfo.objects.filter( | |
| 116 | + brand_id=obj.brand_id, | |
| 117 | + camera_brand_name=obj.camera_brand_name, | |
| 118 | + camera_name=obj.camera_name, | |
| 119 | + ).update( | |
| 120 | + camera_image=obj.camera_image, | |
| 121 | + ) | |
| 122 | + | |
| 123 | + def delete_model(self, request, obj): | |
| 124 | + obj.delete() | |
| 125 | + | |
| 126 | + # 更新"型号机身适配"机身图片 | |
| 127 | + ModelCameraBodyInfo.objects.filter( | |
| 128 | + brand_id=obj.brand_id, | |
| 129 | + camera_brand_name=obj.camera_brand_name, | |
| 130 | + camera_name=obj.camera_name, | |
| 131 | + ).update( | |
| 132 | + camera_image=None, | |
| 133 | + ) | |
| 134 | + | |
| 90 | 135 |  | 
| 91 | 136 | class ModelCameraBodyInfoAdmin(DeleteModelAdmin, admin.ModelAdmin): | 
| 92 | -    list_display = ('brand_id', 'brand_name', 'model_name', 'model_full_name', 'camera_name', 'status', 'created_at', 'updated_at') | |
| 93 | -    list_filter = ('brand_name', 'model_name', 'status') | |
| 137 | +    list_display = ('brand_id', 'brand_name', 'model_name', 'model_full_name', 'model_image', 'camera_brand_name', 'camera_name', 'camera_image', 'status', 'created_at', 'updated_at') | |
| 138 | +    list_filter = ('brand_name', 'model_name', 'camera_brand_name', 'status') | |
| 139 | +    readonly_fields = ('model_image', 'camera_image') | |
| 94 | 140 |      search_fields = ('brand_id', 'brand_name', 'model_name', 'model_full_name', 'camera_name') | 
| 95 | 141 |  | 
| 96 | 142 |  | 
| @@ -207,6 +253,7 @@ admin.site.register(AdministratorInfo, AdministratorInfoAdmin) | ||
| 207 | 253 | admin.site.register(OperatorInfo, OperatorInfoAdmin) | 
| 208 | 254 | admin.site.register(BrandInfo, BrandInfoAdmin) | 
| 209 | 255 | admin.site.register(ModelInfo, ModelInfoAdmin) | 
| 256 | +admin.site.register(CameraModelInfo, CameraModelInfoAdmin) | |
| 210 | 257 | admin.site.register(ModelCameraBodyInfo, ModelCameraBodyInfoAdmin) | 
| 211 | 258 | # admin.site.register(ModelImageInfo, ModelImageInfoAdmin) | 
| 212 | 259 | admin.site.register(DistributorInfo, DistributorInfoAdmin) | 
| @@ -0,0 +1,26 @@ | ||
| 1 | +# -*- coding: utf-8 -*- | |
| 2 | +# Generated by Django 1.11.28 on 2020-03-04 10:26 | |
| 3 | +from __future__ import unicode_literals | |
| 4 | + | |
| 5 | +from django.db import migrations, models | |
| 6 | +import django_models_ext.fileext | |
| 7 | + | |
| 8 | + | |
| 9 | +class Migration(migrations.Migration): | |
| 10 | + | |
| 11 | + dependencies = [ | |
| 12 | +        ('mch', '0044_modelcamerabodyinfo_camera_brand_name'), | |
| 13 | + ] | |
| 14 | + | |
| 15 | + operations = [ | |
| 16 | + migrations.AddField( | |
| 17 | + model_name='modelcamerabodyinfo', | |
| 18 | + name='camera_image', | |
| 19 | + field=models.ImageField(blank=True, help_text='\u673a\u8eab\u56fe\u7247', null=True, upload_to=django_models_ext.fileext.upload_path, verbose_name='camera_image'), | |
| 20 | + ), | |
| 21 | + migrations.AddField( | |
| 22 | + model_name='modelcamerabodyinfo', | |
| 23 | + name='model_image', | |
| 24 | + field=models.ImageField(blank=True, help_text='\u955c\u5934\u56fe\u7247', null=True, upload_to=django_models_ext.fileext.upload_path, verbose_name='model_image'), | |
| 25 | + ), | |
| 26 | + ] | 
| @@ -0,0 +1,32 @@ | ||
| 1 | +# -*- coding: utf-8 -*- | |
| 2 | +# Generated by Django 1.11.28 on 2020-03-04 10:35 | |
| 3 | +from __future__ import unicode_literals | |
| 4 | + | |
| 5 | +from django.db import migrations, models | |
| 6 | +import django_models_ext.fileext | |
| 7 | + | |
| 8 | + | |
| 9 | +class Migration(migrations.Migration): | |
| 10 | + | |
| 11 | + dependencies = [ | |
| 12 | +        ('mch', '0045_auto_20200304_1826'), | |
| 13 | + ] | |
| 14 | + | |
| 15 | + operations = [ | |
| 16 | + migrations.CreateModel( | |
| 17 | + name='CameraModelInfo', | |
| 18 | + fields=[ | |
| 19 | +                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | |
| 20 | +                ('status', models.BooleanField(db_index=True, default=True, help_text='Status', verbose_name='status')), | |
| 21 | +                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')), | |
| 22 | +                ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')), | |
| 23 | +                ('camera_brand_name', models.CharField(blank=True, help_text='\u673a\u8eab\u54c1\u724c', max_length=255, null=True, verbose_name='camera_brand_name')), | |
| 24 | +                ('camera_name', models.CharField(blank=True, help_text='\u673a\u8eab\u540d\u79f0', max_length=255, null=True, verbose_name='camera_name')), | |
| 25 | +                ('camera_image', models.ImageField(blank=True, help_text='\u673a\u8eab\u56fe\u7247', null=True, upload_to=django_models_ext.fileext.upload_path, verbose_name='camera_image')), | |
| 26 | + ], | |
| 27 | +            options={ | |
| 28 | + 'verbose_name': '\u673a\u8eab\u4fe1\u606f', | |
| 29 | + 'verbose_name_plural': '\u673a\u8eab\u4fe1\u606f', | |
| 30 | + }, | |
| 31 | + ), | |
| 32 | + ] | 
| @@ -0,0 +1,25 @@ | ||
| 1 | +# -*- coding: utf-8 -*- | |
| 2 | +# Generated by Django 1.11.28 on 2020-03-04 10:48 | |
| 3 | +from __future__ import unicode_literals | |
| 4 | + | |
| 5 | +from django.db import migrations, models | |
| 6 | + | |
| 7 | + | |
| 8 | +class Migration(migrations.Migration): | |
| 9 | + | |
| 10 | + dependencies = [ | |
| 11 | +        ('mch', '0046_cameramodelinfo'), | |
| 12 | + ] | |
| 13 | + | |
| 14 | + operations = [ | |
| 15 | + migrations.AddField( | |
| 16 | + model_name='cameramodelinfo', | |
| 17 | + name='brand_id', | |
| 18 | + field=models.CharField(blank=True, db_index=True, help_text='\u54c1\u724c\u552f\u4e00\u6807\u8bc6', max_length=32, null=True, verbose_name='brand_id'), | |
| 19 | + ), | |
| 20 | + migrations.AddField( | |
| 21 | + model_name='cameramodelinfo', | |
| 22 | + name='brand_name', | |
| 23 | + field=models.CharField(blank=True, help_text='\u54c1\u724c\u540d\u79f0', max_length=255, null=True, verbose_name='brand_name'), | |
| 24 | + ), | |
| 25 | + ] | 
| @@ -283,15 +283,33 @@ class ModelImageInfo(BaseModelMixin): | ||
| 283 | 283 | } | 
| 284 | 284 |  | 
| 285 | 285 |  | 
| 286 | +class CameraModelInfo(BaseModelMixin): | |
| 287 | + brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True) | |
| 288 | + brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称') | |
| 289 | + | |
| 290 | + camera_brand_name = models.CharField(_(u'camera_brand_name'), max_length=255, blank=True, null=True, help_text=u'机身品牌') | |
| 291 | + camera_name = models.CharField(_(u'camera_name'), max_length=255, blank=True, null=True, help_text=u'机身名称') | |
| 292 | + camera_image = models.ImageField(_(u'camera_image'), upload_to=upload_path, blank=True, null=True, help_text=u'机身图片') | |
| 293 | + | |
| 294 | + class Meta: | |
| 295 | + verbose_name = _(u'机身信息') | |
| 296 | + verbose_name_plural = _(u'机身信息') | |
| 297 | + | |
| 298 | + def __unicode__(self): | |
| 299 | + return unicode(self.pk) | |
| 300 | + | |
| 301 | + | |
| 286 | 302 | class ModelCameraBodyInfo(BaseModelMixin): | 
| 287 | 303 | brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True) | 
| 288 | 304 | brand_name = models.CharField(_(u'brand_name'), max_length=255, blank=True, null=True, help_text=u'品牌名称') | 
| 289 | 305 |  | 
| 290 | 306 | model_name = models.CharField(_(u'model_name'), max_length=32, blank=True, null=True, help_text=u'型号名称') | 
| 291 | 307 | model_full_name = models.CharField(_(u'model_full_name'), max_length=255, blank=True, null=True, help_text=u'型号全名称') | 
| 308 | + model_image = models.ImageField(_(u'model_image'), upload_to=upload_path, blank=True, null=True, help_text=u'镜头图片') | |
| 292 | 309 |  | 
| 293 | - camera_name = models.CharField(_(u'camera_name'), max_length=255, blank=True, null=True, help_text=u'机身名称') | |
| 294 | 310 | camera_brand_name = models.CharField(_(u'camera_brand_name'), max_length=255, blank=True, null=True, help_text=u'机身品牌') | 
| 311 | + camera_name = models.CharField(_(u'camera_name'), max_length=255, blank=True, null=True, help_text=u'机身名称') | |
| 312 | + camera_image = models.ImageField(_(u'camera_image'), upload_to=upload_path, blank=True, null=True, help_text=u'机身图片') | |
| 295 | 313 |  | 
| 296 | 314 | class Meta: | 
| 297 | 315 | verbose_name = _(u'型号机身适配信息') | 
| @@ -301,12 +319,22 @@ class ModelCameraBodyInfo(BaseModelMixin): | ||
| 301 | 319 | return unicode(self.pk) | 
| 302 | 320 |  | 
| 303 | 321 | @property | 
| 322 | + def model_url(self): | |
| 323 | + return upload_file_url(self.model_image) | |
| 324 | + | |
| 325 | + @property | |
| 326 | + def camera_url(self): | |
| 327 | + return upload_file_url(self.camera_image) | |
| 328 | + | |
| 329 | + @property | |
| 304 | 330 | def data(self): | 
| 305 | 331 |          return { | 
| 306 | 332 | 'model_name': self.model_name, | 
| 307 | 333 | 'model_full_name': self.model_full_name, | 
| 308 | - 'camera_name': self.camera_name, | |
| 334 | + 'model_url': self.model_url, | |
| 309 | 335 | 'camera_brand_name': self.camera_brand_name, | 
| 336 | + 'camera_name': self.camera_name, | |
| 337 | + 'camera_url': self.camera_url, | |
| 310 | 338 | } | 
| 311 | 339 |  | 
| 312 | 340 |  |