This commit is contained in:
@@ -98,9 +98,14 @@ class ActivitySignupAdmin(ModelAdmin):
|
|||||||
"pending": "warning",
|
"pending": "warning",
|
||||||
"confirmed": "success",
|
"confirmed": "success",
|
||||||
"cancelled": "danger",
|
"cancelled": "danger",
|
||||||
|
"unpaid": "secondary",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
def status_label(self, obj):
|
def status_label(self, obj):
|
||||||
|
# Auto sync with order status on display
|
||||||
|
if obj.check_payment_status():
|
||||||
|
# If status changed, return new status
|
||||||
|
return obj.status
|
||||||
return obj.status
|
return obj.status
|
||||||
|
|
||||||
@display(description="关联订单")
|
@display(description="关联订单")
|
||||||
|
|||||||
@@ -95,6 +95,17 @@ class ActivitySignup(models.Model):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.user.nickname} - {self.activity.title}"
|
return f"{self.user.nickname} - {self.activity.title}"
|
||||||
|
|
||||||
|
def check_payment_status(self):
|
||||||
|
"""
|
||||||
|
检查并同步关联订单的支付状态
|
||||||
|
"""
|
||||||
|
if self.status == 'unpaid' and self.order:
|
||||||
|
if self.order.status == 'paid':
|
||||||
|
self.status = 'confirmed' if self.activity.auto_confirm else 'pending'
|
||||||
|
self.save()
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "活动报名"
|
verbose_name = "活动报名"
|
||||||
verbose_name_plural = "活动报名管理"
|
verbose_name_plural = "活动报名管理"
|
||||||
|
|||||||
@@ -197,6 +197,11 @@ class ActivityViewSet(viewsets.ReadOnlyModelViewSet):
|
|||||||
if not user:
|
if not user:
|
||||||
return Response({'error': '请先登录'}, status=401)
|
return Response({'error': '请先登录'}, status=401)
|
||||||
signups = ActivitySignup.objects.filter(user=user).order_by('-signup_time')
|
signups = ActivitySignup.objects.filter(user=user).order_by('-signup_time')
|
||||||
|
|
||||||
|
# Sync payment status
|
||||||
|
for signup in signups:
|
||||||
|
signup.check_payment_status()
|
||||||
|
|
||||||
serializer = ActivitySignupSerializer(signups, many=True)
|
serializer = ActivitySignupSerializer(signups, many=True)
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
||||||
|
|||||||
@@ -532,10 +532,15 @@ def payment_finish(request):
|
|||||||
|
|
||||||
if signup:
|
if signup:
|
||||||
# Determine status based on activity setting
|
# Determine status based on activity setting
|
||||||
new_status = 'confirmed' if signup.activity.auto_confirm else 'pending'
|
# Use the model method if available, otherwise manual logic
|
||||||
signup.status = new_status
|
if hasattr(signup, 'check_payment_status'):
|
||||||
signup.save()
|
signup.check_payment_status()
|
||||||
print(f"活动报名状态已更新: {signup.id} -> {new_status}")
|
print(f"活动报名状态已更新(check_payment_status): {signup.id} -> {signup.status}")
|
||||||
|
else:
|
||||||
|
new_status = 'confirmed' if signup.activity.auto_confirm else 'pending'
|
||||||
|
signup.status = new_status
|
||||||
|
signup.save()
|
||||||
|
print(f"活动报名状态已更新: {signup.id} -> {new_status}")
|
||||||
else:
|
else:
|
||||||
print(f"Error: No ActivitySignup found for paid order {order.id}")
|
print(f"Error: No ActivitySignup found for paid order {order.id}")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user