finish
This commit is contained in:
@@ -165,7 +165,8 @@ class CommissionLog(models.Model):
|
||||
)
|
||||
|
||||
order = models.ForeignKey('Order', on_delete=models.CASCADE, verbose_name="关联订单", related_name='commissions')
|
||||
salesperson = models.ForeignKey(Salesperson, on_delete=models.CASCADE, verbose_name="获佣销售员", related_name='commissions')
|
||||
salesperson = models.ForeignKey(Salesperson, on_delete=models.CASCADE, verbose_name="获佣销售员", related_name='commissions', null=True, blank=True)
|
||||
distributor = models.ForeignKey(Distributor, on_delete=models.CASCADE, verbose_name="获佣分销员", related_name='commissions', null=True, blank=True)
|
||||
amount = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="佣金金额")
|
||||
level = models.IntegerField(default=1, verbose_name="分销层级", help_text="1: 直接销售, 2: 二级分销")
|
||||
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending', verbose_name="状态")
|
||||
@@ -219,13 +220,15 @@ class Order(models.Model):
|
||||
('cancelled', '已取消'),
|
||||
)
|
||||
|
||||
config = models.ForeignKey(ESP32Config, on_delete=models.CASCADE, verbose_name="所选配置")
|
||||
config = models.ForeignKey(ESP32Config, on_delete=models.CASCADE, verbose_name="所选配置", null=True, blank=True)
|
||||
course = models.ForeignKey('VCCourse', on_delete=models.SET_NULL, null=True, blank=True, verbose_name="所选课程", related_name='orders')
|
||||
quantity = models.IntegerField(default=1, verbose_name="数量")
|
||||
total_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="总价")
|
||||
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending', verbose_name="订单状态")
|
||||
|
||||
# 销售归属
|
||||
salesperson = models.ForeignKey(Salesperson, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="所属销售员", related_name='orders')
|
||||
distributor = models.ForeignKey(Distributor, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="所属分销员", related_name='orders')
|
||||
|
||||
# 关联微信用户
|
||||
wechat_user = models.ForeignKey(WeChatUser, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="下单微信用户", related_name='orders')
|
||||
@@ -312,9 +315,9 @@ class ServiceOrder(models.Model):
|
||||
verbose_name_plural = "服务订单列表"
|
||||
|
||||
|
||||
class VBCourse(models.Model):
|
||||
class VCCourse(models.Model):
|
||||
"""
|
||||
VB Coding 课程模型
|
||||
VC (VB Coding) 课程模型
|
||||
"""
|
||||
COURSE_TYPE_CHOICES = (
|
||||
('software', '软件课程'),
|
||||
@@ -327,10 +330,17 @@ class VBCourse(models.Model):
|
||||
course_type = models.CharField(max_length=20, choices=COURSE_TYPE_CHOICES, default='software', verbose_name="课程类型")
|
||||
duration = models.CharField(max_length=50, verbose_name="课程时长", help_text="例如: 30分钟", default="30分钟")
|
||||
lesson_count = models.IntegerField(default=1, verbose_name="课时数量")
|
||||
instructor = models.CharField(max_length=50, verbose_name="讲师", default="VB讲师")
|
||||
instructor = models.CharField(max_length=50, verbose_name="讲师", default="VC讲师")
|
||||
instructor_title = models.CharField(max_length=50, verbose_name="讲师头衔", default="资深讲师")
|
||||
instructor_avatar = models.ImageField(upload_to='instructors/avatars/', blank=True, null=True, verbose_name="讲师头像 (上传)")
|
||||
instructor_avatar_url = models.URLField(blank=True, null=True, verbose_name="讲师头像 (URL)")
|
||||
instructor_desc = models.TextField(blank=True, verbose_name="讲师简介", default="拥有多年开发经验,擅长...")
|
||||
|
||||
tag = models.CharField(max_length=20, blank=True, verbose_name="标签", help_text="例如: 热门, 推荐, 进阶")
|
||||
|
||||
price = models.DecimalField(max_digits=10, decimal_places=2, default=0, verbose_name="价格", help_text="0表示免费")
|
||||
content = models.TextField(blank=True, verbose_name="详细内容", help_text="支持Markdown或HTML")
|
||||
|
||||
cover_image = models.ImageField(upload_to='courses/covers/', blank=True, null=True, verbose_name="封面图 (上传)")
|
||||
cover_image_url = models.URLField(blank=True, null=True, verbose_name="封面图 (URL)")
|
||||
|
||||
@@ -343,5 +353,40 @@ class VBCourse(models.Model):
|
||||
return self.title
|
||||
|
||||
class Meta:
|
||||
verbose_name = "VB课程"
|
||||
verbose_name_plural = "VB课程管理"
|
||||
verbose_name = "VC课程"
|
||||
verbose_name_plural = "VC课程管理"
|
||||
|
||||
|
||||
class CourseEnrollment(models.Model):
|
||||
"""
|
||||
课程报名/咨询记录
|
||||
"""
|
||||
STATUS_CHOICES = (
|
||||
('pending', '待联系'),
|
||||
('contacted', '已联系'),
|
||||
('completed', '已完成'),
|
||||
('cancelled', '已取消'),
|
||||
)
|
||||
|
||||
course = models.ForeignKey(VCCourse, on_delete=models.CASCADE, verbose_name="咨询课程", related_name='enrollments')
|
||||
customer_name = models.CharField(max_length=100, verbose_name="姓名")
|
||||
phone_number = models.CharField(max_length=20, verbose_name="联系电话")
|
||||
email = models.EmailField(blank=True, verbose_name="电子邮箱")
|
||||
wechat_id = models.CharField(max_length=50, blank=True, verbose_name="微信号")
|
||||
message = models.TextField(blank=True, verbose_name="留言/备注")
|
||||
|
||||
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending', verbose_name="状态")
|
||||
|
||||
# 销售归属
|
||||
salesperson = models.ForeignKey(Salesperson, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="所属销售员")
|
||||
distributor = models.ForeignKey(Distributor, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="所属分销员")
|
||||
|
||||
created_at = models.DateTimeField(auto_now_add=True, verbose_name="提交时间")
|
||||
updated_at = models.DateTimeField(auto_now=True, verbose_name="更新时间")
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.customer_name} - {self.course.title}"
|
||||
|
||||
class Meta:
|
||||
verbose_name = "课程报名"
|
||||
verbose_name_plural = "课程报名管理"
|
||||
|
||||
Reference in New Issue
Block a user