审核商品种子脚本改用小程序默认头像相对路径 beijing/morentouxiang.jpg。
优先读取 tupianpeizhi leixing=2 配置;已存在商品会同步更新图标路径。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -19,8 +19,24 @@ from django.db import transaction
|
|||||||
|
|
||||||
from shangpin.models import Shangpin, ShangpinLeixing, ShangpinZhuanqu
|
from shangpin.models import Shangpin, ShangpinLeixing, ShangpinZhuanqu
|
||||||
|
|
||||||
# 与 UserMain 默认头像一致,前端 OSS 拼接后可正常显示
|
# 小程序点单/头像拼接用的相对路径(与 peizhi GetDynamicConfig otherConfig.morentouxiang 默认一致)
|
||||||
DEFAULT_PRODUCT_IMAGE = 'a_long/morentouxiang.jpg'
|
FALLBACK_DEFAULT_AVATAR = 'beijing/morentouxiang.jpg'
|
||||||
|
|
||||||
|
|
||||||
|
def get_default_avatar_relative_url():
|
||||||
|
"""
|
||||||
|
默认头像相对 URL:
|
||||||
|
1. 优先读后台 tupianpeizhi 表 leixing=2(默认头像图片配置)
|
||||||
|
2. 否则用 beijing/morentouxiang.jpg(小程序动态配置默认值)
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
from peizhi.models import Tupianpeizhi
|
||||||
|
row = Tupianpeizhi.objects.filter(leixing=2).only('tupian').first()
|
||||||
|
if row and row.tupian:
|
||||||
|
return str(row.tupian).strip().lstrip('/')
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
return FALLBACK_DEFAULT_AVATAR
|
||||||
|
|
||||||
AUDIT_TYPE_NAME = '电竞休闲体验'
|
AUDIT_TYPE_NAME = '电竞休闲体验'
|
||||||
|
|
||||||
@@ -112,7 +128,9 @@ class Command(BaseCommand):
|
|||||||
return
|
return
|
||||||
|
|
||||||
if dry_run:
|
if dry_run:
|
||||||
|
avatar_url = get_default_avatar_relative_url()
|
||||||
self.stdout.write(self.style.NOTICE('【预览模式】将写入以下结构:'))
|
self.stdout.write(self.style.NOTICE('【预览模式】将写入以下结构:'))
|
||||||
|
self.stdout.write(f' 商品图标相对路径: {avatar_url}')
|
||||||
self.stdout.write(f' 类型 1 个: {AUDIT_TYPE_NAME} (shenhezhuangtai=2)')
|
self.stdout.write(f' 类型 1 个: {AUDIT_TYPE_NAME} (shenhezhuangtai=2)')
|
||||||
self.stdout.write(f' 专区 {len(ZONES)} 个')
|
self.stdout.write(f' 专区 {len(ZONES)} 个')
|
||||||
self.stdout.write(f' 商品 {len(PRODUCTS)} 个 (shenhezhuangtai=2)')
|
self.stdout.write(f' 商品 {len(PRODUCTS)} 个 (shenhezhuangtai=2)')
|
||||||
@@ -122,17 +140,23 @@ class Command(BaseCommand):
|
|||||||
return
|
return
|
||||||
|
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
|
default_image = get_default_avatar_relative_url()
|
||||||
leixing, _ = ShangpinLeixing.objects.get_or_create(
|
leixing, _ = ShangpinLeixing.objects.get_or_create(
|
||||||
jieshao=AUDIT_TYPE_NAME,
|
jieshao=AUDIT_TYPE_NAME,
|
||||||
shenhezhuangtai=2,
|
shenhezhuangtai=2,
|
||||||
defaults={
|
defaults={
|
||||||
'tupian_url': DEFAULT_PRODUCT_IMAGE,
|
'tupian_url': default_image,
|
||||||
'paixu': 9999,
|
'paixu': 9999,
|
||||||
'is_cross_enabled': False,
|
'is_cross_enabled': False,
|
||||||
'is_special_type': False,
|
'is_special_type': False,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# 已存在类型时同步图标为当前默认头像
|
||||||
|
if leixing.tupian_url != default_image:
|
||||||
|
leixing.tupian_url = default_image
|
||||||
|
leixing.save(update_fields=['tupian_url'])
|
||||||
|
|
||||||
zone_map = {}
|
zone_map = {}
|
||||||
for name, paixu in ZONES:
|
for name, paixu in ZONES:
|
||||||
zone, _ = ShangpinZhuanqu.objects.get_or_create(
|
zone, _ = ShangpinZhuanqu.objects.get_or_create(
|
||||||
@@ -147,11 +171,13 @@ class Command(BaseCommand):
|
|||||||
skipped = 0
|
skipped = 0
|
||||||
for zone_name, title, price, sales, sort_weight, desc in PRODUCTS:
|
for zone_name, title, price, sales, sort_weight, desc in PRODUCTS:
|
||||||
zhuanqu = zone_map[zone_name]
|
zhuanqu = zone_map[zone_name]
|
||||||
if Shangpin.objects.filter(
|
exists_qs = Shangpin.objects.filter(
|
||||||
biaoqian=title,
|
biaoqian=title,
|
||||||
shenhezhuangtai=2,
|
shenhezhuangtai=2,
|
||||||
zhuanqu_id=zhuanqu.id,
|
zhuanqu_id=zhuanqu.id,
|
||||||
).exists():
|
)
|
||||||
|
if exists_qs.exists():
|
||||||
|
exists_qs.update(tupian_url=default_image)
|
||||||
skipped += 1
|
skipped += 1
|
||||||
continue
|
continue
|
||||||
Shangpin.objects.create(
|
Shangpin.objects.create(
|
||||||
@@ -164,7 +190,7 @@ class Command(BaseCommand):
|
|||||||
duiwai_xiaoliang=sales,
|
duiwai_xiaoliang=sales,
|
||||||
jieshao=desc,
|
jieshao=desc,
|
||||||
xiadan_xuzhi=ORDER_NOTICE,
|
xiadan_xuzhi=ORDER_NOTICE,
|
||||||
tupian_url=DEFAULT_PRODUCT_IMAGE,
|
tupian_url=default_image,
|
||||||
yaoqiuleixing=None,
|
yaoqiuleixing=None,
|
||||||
huiyuan_id=None,
|
huiyuan_id=None,
|
||||||
yongjin=None,
|
yongjin=None,
|
||||||
@@ -177,7 +203,7 @@ class Command(BaseCommand):
|
|||||||
|
|
||||||
self.stdout.write(self.style.SUCCESS(
|
self.stdout.write(self.style.SUCCESS(
|
||||||
f'完成:类型 id={leixing.id},专区 {len(zone_map)} 个,'
|
f'完成:类型 id={leixing.id},专区 {len(zone_map)} 个,'
|
||||||
f'新建商品 {created} 个,跳过已存在 {skipped} 个。'
|
f'新建商品 {created} 个,跳过已存在 {skipped} 个,图标={default_image}。'
|
||||||
))
|
))
|
||||||
self.stdout.write('请将 xcx_sys_peizhi.shangpin_shenhe_mode 设为 2 后,小程序点单页即展示审核商品。')
|
self.stdout.write('请将 xcx_sys_peizhi.shangpin_shenhe_mode 设为 2 后,小程序点单页即展示审核商品。')
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user