@@ -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) |
@@ -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 |
+ ] |
@@ -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, |