only_for_member

huangqimin 5 年之前
父节点
当前提交
ec4c2109cc
共有 4 个文件被更改,包括 44 次插入23 次删除
  1. 5 5
      api/member_views.py
  2. 3 2
      member/admin.py
  3. 20 0
      member/migrations/0013_goodsinfo_only_for_member.py
  4. 16 16
      member/models.py

+ 5 - 5
api/member_views.py

@@ -31,7 +31,7 @@ def member(request):
31 31
     rights = [right.data for right in rights]
32 32
 
33 33
     goods = GoodsInfo.objects.filter(status=True).order_by('position')
34
-    goods = [good.data for good in goods][:2]
34
+    goods = [good.data(user_id) for good in goods][:2]
35 35
 
36 36
     return response(200, data={
37 37
         'nickname': user.final_nickname,
@@ -104,9 +104,9 @@ def goods(request):
104 104
     banners = goods = []
105 105
     for good in raw_goods:
106 106
         if good.is_slider:
107
-            banners.append(good.data)
107
+            banners.append(good.data(user_id))
108 108
         else:
109
-            goods.append(good.data)
109
+            goods.append(good.data(user_id))
110 110
 
111 111
     return response(200, data={
112 112
         'nickname': user.final_nickname,
@@ -146,7 +146,7 @@ def good_detail(request):
146 146
         'final_integral': user.final_integral,
147 147
         'shots_num': user.shots_num,
148 148
         'level': user.level,
149
-        'good': good.details,
149
+        'good': good.details(user_id),
150 150
     })
151 151
 
152 152
 
@@ -204,7 +204,7 @@ def good_exchange(request):
204 204
         'final_integral': user.final_integral,
205 205
         'shots_num': user.shots_num,
206 206
         'level': user.level,
207
-        'good': good.data,
207
+        'good': good.data(user_id),
208 208
     })
209 209
 
210 210
 

+ 3 - 2
member/admin.py

@@ -8,12 +8,13 @@ from utils.redis.rshot import update_member_shot_data
8 8
 
9 9
 
10 10
 class GoodsInfoAdmin(admin.ModelAdmin):
11
-    list_display = ('good_id', 'good_type', 'title', 'desc', 'image', 'is_slider', 'slider_image', 'integral', 'fee', 'minlevel', 'position', 'status', 'created_at', 'updated_at')
12
-    list_filter = ('is_slider', 'status')
11
+    list_display = ('good_id', 'good_type', 'title', 'desc', 'image', 'is_slider', 'slider_image', 'integral', 'fee', 'minlevel', 'only_for_member', 'position', 'status', 'created_at', 'updated_at')
12
+    list_filter = ('good_type', 'is_slider', 'only_for_member', 'status')
13 13
 
14 14
 
15 15
 class GoodsOrderInfoAdmin(admin.ModelAdmin):
16 16
     list_display = ('order_id', 'user_id', 'good_id', 'good_type', 'title', 'name', 'phone', 'address', 'tracking_number', 'has_send_template_message', 'status', 'created_at', 'updated_at')
17
+    list_filter = ('good_type', 'status')
17 18
 
18 19
     def save_model(self, request, obj, form, change):
19 20
         obj.save()

+ 20 - 0
member/migrations/0013_goodsinfo_only_for_member.py

@@ -0,0 +1,20 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 1.11.26 on 2019-12-21 07:01
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
+        ('member', '0012_auto_20191221_1419'),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.AddField(
16
+            model_name='goodsinfo',
17
+            name='only_for_member',
18
+            field=models.BooleanField(db_index=True, default=False, help_text='\u4f1a\u5458\u4e13\u5c5e', verbose_name='only_for_member'),
19
+        ),
20
+    ]

+ 16 - 16
member/models.py

@@ -38,6 +38,8 @@ class GoodsInfo(BaseModelMixin):
38 38
 
39 39
     minlevel = models.IntegerField(_(u'minlevel'), default=0, help_text=u'兑换最低会员级别')
40 40
 
41
+    only_for_member = models.BooleanField(_(u'only_for_member'), default=False, help_text=u'会员专属', db_index=True)
42
+
41 43
     position = models.IntegerField(_(u'position'), default=1, help_text=u'排序', db_index=True)
42 44
 
43 45
     class Meta:
@@ -63,8 +65,14 @@ class GoodsInfo(BaseModelMixin):
63 65
     def slider_image_url(self):
64 66
         return upload_file_url(self.slider_image)
65 67
 
66
-    @property
67
-    def data(self):
68
+    def has_member_exchange(self, user_id=None):
69
+        if not self.only_for_member:
70
+            return False
71
+        if not user_id:
72
+            return False
73
+        return GoodsOrderInfo.objects.filter(good_id=self.good_id, user_id=user_id).exists()
74
+
75
+    def data(self, user_id=None):
68 76
         return {
69 77
             'good_id': self.good_id,
70 78
             'good_type': self.good_type,
@@ -74,23 +82,15 @@ class GoodsInfo(BaseModelMixin):
74 82
             'integral': self.integral,
75 83
             'fee': self.fee,
76 84
             'minlevel': self.minlevel,
85
+            'only_for_member': self.only_for_member,
86
+            'has_member_exchange': self.has_member_exchange(user_id),
77 87
             'able': True,
78 88
         }
79 89
     
80
-    @property
81
-    def details(self):
82
-        return {
83
-            'good_id': self.good_id,
84
-            'good_type': self.good_type,
85
-            'title': self.title,
86
-            'image': self.image_url,
87
-            'slider_image': self.slider_image_url,
88
-            'integral': self.integral,
89
-            'fee': self.fee,
90
-            'minlevel': self.minlevel,
91
-            'able': True,
92
-            'desc': self.desc,
93
-        }
90
+    def details(self, user_id):
91
+        detail = self.data(user_id)
92
+        detail['desc'] = self.desc
93
+        return detail
94 94
 
95 95
 
96 96
 class GoodsOrderInfo(BaseModelMixin):