@@ -0,0 +1,21 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+ |
|
3 |
+from __future__ import division |
|
4 |
+ |
|
5 |
+from django.conf import settings |
|
6 |
+from django_logit import logit |
|
7 |
+from django_response import response |
|
8 |
+ |
|
9 |
+from mch.models import SlideInfo |
|
10 |
+ |
|
11 |
+ |
|
12 |
+@logit |
|
13 |
+def slides(request): |
|
14 |
+ brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) |
|
15 |
+ |
|
16 |
+ slides = SlideInfo.objects.filter(brand_id=brand_id) |
|
17 |
+ slides = [s.data for s in slides] |
|
18 |
+ |
|
19 |
+ return response(data={ |
|
20 |
+ 'slides': slides, |
|
21 |
+ }) |
@@ -5,7 +5,7 @@ from django_file_upload import views as file_views |
||
5 | 5 |
|
6 | 6 |
from account import tourguide_views |
7 | 7 |
from account import views as account_views |
8 |
-from api import admin_views, clerk_views, distributor_views, encrypt_views, mch_views, model_views, operator_views |
|
8 |
+from api import admin_views, clerk_views, distributor_views, encrypt_views, mch_views, model_views, operator_views, slide_views |
|
9 | 9 |
from box import views as box_views |
10 | 10 |
from geo import views as geo_views |
11 | 11 |
from group import (groupuser_views, lensman_views, tourguidegroup_views, tourguidegroupadmin_views, |
@@ -290,3 +290,7 @@ urlpatterns += [ |
||
290 | 290 |
url(r'^admin/queryusedsn$', admin_views.queryusedsn, name='queryusedsn'), |
291 | 291 |
url(r'^admin/usecoupon$', admin_views.usecoupon, name='usecoupon'), |
292 | 292 |
] |
293 |
+ |
|
294 |
+urlpatterns += [ |
|
295 |
+ url(r'^slides$', slide_views.slides, name='slides'), |
|
296 |
+] |
@@ -9,7 +9,7 @@ from django_models_ext import ProvinceShortModelMixin |
||
9 | 9 |
from pysnippets.strsnippets import strip |
10 | 10 |
|
11 | 11 |
from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, ConsumeImpressionInfo, DistributorInfo, |
12 |
- LatestAppInfo, LatestAppScreenInfo, ModelInfo, OperatorInfo, SaleclerkInfo) |
|
12 |
+ LatestAppInfo, LatestAppScreenInfo, ModelInfo, OperatorInfo, SaleclerkInfo, SlideInfo) |
|
13 | 13 |
|
14 | 14 |
|
15 | 15 |
class AdministratorInfoAdmin(admin.ModelAdmin): |
@@ -196,6 +196,11 @@ class ActivityInfoAdmin(admin.ModelAdmin): |
||
196 | 196 |
list_filter = ('coupon_expire_type', 'status') |
197 | 197 |
|
198 | 198 |
|
199 |
+class SlideInfoAdmin(admin.ModelAdmin): |
|
200 |
+ list_display = ('brand_id', 'image', 'url', 'position', 'status', 'created_at', 'updated_at') |
|
201 |
+ list_filter = ('brand_id', 'status') |
|
202 |
+ |
|
203 |
+ |
|
199 | 204 |
admin.site.register(AdministratorInfo, AdministratorInfoAdmin) |
200 | 205 |
admin.site.register(OperatorInfo, OperatorInfoAdmin) |
201 | 206 |
admin.site.register(BrandInfo, BrandInfoAdmin) |
@@ -209,3 +214,4 @@ admin.site.register(LatestAppScreenInfo, LatestAppScreenInfoAdmin) |
||
209 | 214 |
admin.site.register(ConsumeImpressionInfo, ConsumeImpressionInfoAdmin) |
210 | 215 |
admin.site.register(ConsumeInfoSubmitLogInfo, ConsumeInfoSubmitLogInfoAdmin) |
211 | 216 |
admin.site.register(ActivityInfo, ActivityInfoAdmin) |
217 |
+admin.site.register(SlideInfo, SlideInfoAdmin) |
@@ -0,0 +1,33 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+# Generated by Django 1.11.22 on 2019-08-12 08:14 |
|
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', '0041_auto_20190812_1429'), |
|
13 |
+ ] |
|
14 |
+ |
|
15 |
+ operations = [ |
|
16 |
+ migrations.CreateModel( |
|
17 |
+ name='SlideInfo', |
|
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 |
+ ('brand_id', models.CharField(blank=True, db_index=True, help_text='\u54c1\u724c\u552f\u4e00\u6807\u8bc6', max_length=32, null=True, verbose_name='brand_id')), |
|
24 |
+ ('image', models.ImageField(blank=True, help_text='\u56fe\u7247', null=True, upload_to=django_models_ext.fileext.upload_path, verbose_name='image')), |
|
25 |
+ ('url', models.CharField(blank=True, help_text='\u94fe\u63a5', max_length=255, null=True, verbose_name='url')), |
|
26 |
+ ('position', models.IntegerField(default=1, help_text='\u6392\u5e8f', verbose_name='position')), |
|
27 |
+ ], |
|
28 |
+ options={ |
|
29 |
+ 'verbose_name': '\u8f6e\u64ad\u56fe\u4fe1\u606f', |
|
30 |
+ 'verbose_name_plural': '\u8f6e\u64ad\u56fe\u4fe1\u606f', |
|
31 |
+ }, |
|
32 |
+ ), |
|
33 |
+ ] |
@@ -745,3 +745,34 @@ class ActivityInfo(BaseModelMixin): |
||
745 | 745 |
|
746 | 746 |
def coupon_info2(self, created_at=None): |
747 | 747 |
return self.coupon_info(created_at=created_at), |
748 |
+ |
|
749 |
+ |
|
750 |
+class SlideInfo(BaseModelMixin): |
|
751 |
+ brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True) |
|
752 |
+ |
|
753 |
+ image = models.ImageField(_(u'image'), upload_to=upload_path, blank=True, null=True, help_text=u'图片') |
|
754 |
+ url = models.CharField(_(u'url'), max_length=255, blank=True, null=True, help_text=u'链接') |
|
755 |
+ |
|
756 |
+ position = models.IntegerField(_(u'position'), default=1, help_text=u'排序') |
|
757 |
+ |
|
758 |
+ class Meta: |
|
759 |
+ verbose_name = _(u'轮播图信息') |
|
760 |
+ verbose_name_plural = _(u'轮播图信息') |
|
761 |
+ |
|
762 |
+ def __unicode__(self): |
|
763 |
+ return unicode(self.pk) |
|
764 |
+ |
|
765 |
+ @property |
|
766 |
+ def image_path(self): |
|
767 |
+ return upload_file_path(self.image) |
|
768 |
+ |
|
769 |
+ @property |
|
770 |
+ def image_url(self): |
|
771 |
+ return upload_file_url(self.image) |
|
772 |
+ |
|
773 |
+ @property |
|
774 |
+ def data(self): |
|
775 |
+ return { |
|
776 |
+ 'image_url': self.image_url, |
|
777 |
+ 'url': self.url, |
|
778 |
+ } |