会员等级礼品关联商品

FFIB лет %!s(int64=2): %!d(string=назад)
Родитель
Сommit
23b0e2f04e
3 измененных файлов с 61 добавлено и 1 удалено
  1. 13 1
      api/admin_views.py
  2. 30 0
      member/migrations/0054_auto_20230303_1653.py
  3. 18 0
      member/models.py

+ 13 - 1
api/admin_views.py

@@ -775,12 +775,16 @@ def member_activity_list(request, administrator):
775 775
     end_time = request.POST.get('end_time', '')
776 776
     page = request.POST.get('page', 1)
777 777
     num = request.POST.get('num', 20)
778
+    activity_state = request.POST.get('activity_state', '')
778 779
 
779 780
     logs = MemberActivityInfo.objects.filter(status=True)
780 781
 
781 782
     if activity_type:
782 783
         logs = logs.filter(activity_type=activity_type)
783 784
 
785
+    if activity_state:
786
+        logs = logs.filter(activity_state=activity_state)
787
+
784 788
     if title:
785 789
         logs = logs.filter(title__icontains=title)
786 790
 
@@ -1445,8 +1449,16 @@ def member_goods_list(request, administrator):
1445 1449
     title = request.POST.get('title', '')
1446 1450
     page = request.POST.get('page', 1)
1447 1451
     num = request.POST.get('num', 20)
1452
+    understock = request.POST.get('understock', 0)
1453
+    good_state = request.POST.get('good_state', '')
1454
+
1455
+    logs = GoodsInfo.objects.filter(title__icontains=title).order_by('-pk')
1456
+
1457
+    if understock:
1458
+        logs = logs.filter(left_num=0)
1448 1459
 
1449
-    logs = GoodsInfo.objects.filter(title__icontains=title, only_for_member=False).order_by('-pk')
1460
+    if good_state:
1461
+        logs = logs.filter(good_state=good_state)
1450 1462
 
1451 1463
     count = logs.count()
1452 1464
     logs, left = pagination(logs, page, num)

+ 30 - 0
member/migrations/0054_auto_20230303_1653.py

@@ -0,0 +1,30 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+# Generated by Django 3.2.6 on 2023-03-03 08:53
4
+
5
+from django.db import migrations, models
6
+
7
+
8
+class Migration(migrations.Migration):
9
+
10
+    dependencies = [
11
+        ('member', '0053_alter_memberactivitygroupshareinfo_unique_together'),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.AddField(
16
+            model_name='goodsinfo',
17
+            name='good_state',
18
+            field=models.IntegerField(choices=[(1, '上架'), (2, '下架')], db_index=True, default=1, help_text='商品类型', verbose_name='good_state'),
19
+        ),
20
+        migrations.AddField(
21
+            model_name='goodsinfo',
22
+            name='relate_good_title',
23
+            field=models.CharField(blank=True, help_text='商品名称', max_length=255, null=True, verbose_name='relate_good_title'),
24
+        ),
25
+        migrations.AddField(
26
+            model_name='goodsorderinfo',
27
+            name='relate_good_title',
28
+            field=models.CharField(blank=True, help_text='关联商品', max_length=255, null=True, verbose_name='relate_good_title'),
29
+        ),
30
+    ]

+ 18 - 0
member/models.py

@@ -26,6 +26,14 @@ class GoodsInfo(BaseModelMixin, BrandInfoMixin):
26 26
         (VIRTUAL, u'虚拟'),
27 27
     )
28 28
 
29
+    SHELVES = 1
30
+    OFF_SHELVES = 2
31
+
32
+    GOOD_STATE_TUPLE = (
33
+        (SHELVES, u'上架'),
34
+        (OFF_SHELVES, u'下架'),
35
+    )
36
+
29 37
     good_id = ShortUUIDField(_(u'good_id'), max_length=32, blank=True, null=True, help_text=u'商品唯一标识', db_index=True, unique=True)
30 38
     good_type = models.IntegerField(_(u'good_type'), choices=GOOD_TYPE_TUPLE, default=VIRTUAL, help_text=u'商品类型', db_index=True)
31 39
 
@@ -49,8 +57,12 @@ class GoodsInfo(BaseModelMixin, BrandInfoMixin):
49 57
     only_for_member = models.BooleanField(_(u'only_for_member'), default=False, help_text=u'会员专属')
50 58
     only_once = models.BooleanField(_(u'only_once'), default=False, help_text=u'仅支持兑换一次')
51 59
 
60
+    relate_good_title = models.CharField(_(u'relate_good_title'), max_length=255, blank=True, null=True, help_text=u'商品名称')
61
+
52 62
     position = models.IntegerField(_(u'position'), default=1, help_text=u'排序', db_index=True)
53 63
 
64
+    good_state = models.IntegerField(_(u'good_state'), choices=GOOD_STATE_TUPLE, default=SHELVES, help_text=u'商品类型', db_index=True)
65
+
54 66
     is_upload_qiniu = models.BooleanField(_(u'is_upload_qiniu'), default=False, help_text=u'是否已上传七牛')
55 67
 
56 68
     class Meta:
@@ -130,6 +142,8 @@ class GoodsInfo(BaseModelMixin, BrandInfoMixin):
130 142
             'fee': self.fee,
131 143
             'value': self.value,
132 144
             'left_num': self.left_num,
145
+            'relate_good_title': self.relate_good_title,
146
+            'good_state': self.good_state,
133 147
             'coupon': coupon,
134 148
             'created_at': tc.local_string(utc_dt=self.created_at),
135 149
         }
@@ -144,6 +158,8 @@ class GoodsInfo(BaseModelMixin, BrandInfoMixin):
144 158
             'good_id': self.good_id,
145 159
             'good_type': self.good_type,
146 160
             'title': self.title,
161
+            'relate_good_title': self.relate_good_title,
162
+            'good_state': self.good_state,
147 163
             'image': self.image_url,
148 164
             'image_path': self.image_path,
149 165
             'slider_image': self.slider_image_url,
@@ -175,6 +191,7 @@ class GoodsOrderInfo(BaseModelMixin, BrandInfoMixin):
175 191
     good_type = models.IntegerField(_(u'good_type'), choices=GOOD_TYPE_TUPLE, default=VIRTUAL, help_text=u'商品类型', db_index=True)
176 192
 
177 193
     title = models.CharField(_(u'title'), max_length=255, blank=True, null=True, help_text=u'商品名称')
194
+    relate_good_title = models.CharField(_(u'relate_good_title'), max_length=255, blank=True, null=True, help_text=u'关联商品')
178 195
 
179 196
     name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'姓名')
180 197
     phone = models.CharField(_(u'phone'), max_length=255, blank=True, null=True, help_text=u'电话')
@@ -204,6 +221,7 @@ class GoodsOrderInfo(BaseModelMixin, BrandInfoMixin):
204 221
             'order_id': self.order_id,
205 222
             'good_id': self.good_id,
206 223
             'good_name': good.title,
224
+            'relate_good_title': self.relate_good_title,
207 225
             'good_type': good.good_type,
208 226
             'user_id': self.user_id,
209 227
             'user_name': self.name,