give content editors a drill-down browser and per-question signals
پیدا کردنِ «سوالهای فلان مبحث» در فهرستِ پیشفرضِ جنگو عملاً ممکن نبود: باید
بینِ چند صفحهی جدا با دراپداونهای هزارتایی بالا و پایین میرفتی.
/admin/content/question/browse/ چهار ستونِ آبشاری دارد — پایه → فصل → درس →
مبحث — و هر ستون فقط وقتی پر میشود که قبلی انتخاب شده باشد، پس هیچوقت
فهرستِ هزارتایی جلوی چشم نیست. تهاش سوالهای همان مبحث با گزینههایشان
میآیند و از همانجا ویرایش یا اضافه میشوند.
کنارِ هر سوال دو عددِ تصمیمساز: گزارشهای بازِ کاربران، و درصدِ پاسخِ غلط.
درصد زیرِ ۵ پاسخ نشان داده نمیشود — یک نمونهی کوچک سوالِ سالم را
«مشکلدار» جلوه میدهد. همین دو ستون به فهرستِ سوالها هم اضافه شدند.
content.QuestionReport و POST /api/questions/{id}/report تازهاند: تنها
بازخوردی که تا امروز جمع میشد مالِ چتِ دستیار بود، و روی سوالهای مسیرِ
آموزشی هیچ راهی نبود که کاربر بگوید گزینهی درست غلط است. گزارشِ بازِ تکراریِ
همان کاربر ردیفِ تازه نمیسازد تا دابلکلیک آمار را بههم نزند.
وابستگیِ تازهای اضافه نشد: چند اندپوینتِ کوچکِ JSON و JavaScript ساده.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
from drf_spectacular.utils import extend_schema_field
|
||||
from rest_framework import serializers
|
||||
|
||||
from .models import Grade
|
||||
from .models import Grade, QuestionReport
|
||||
|
||||
|
||||
# ---- Grades ----
|
||||
@@ -133,3 +133,16 @@ class NodeProgressSerializer(serializers.Serializer):
|
||||
|
||||
class NodeProgressListResponseSerializer(serializers.Serializer):
|
||||
progress = NodeProgressSerializer(many=True)
|
||||
|
||||
|
||||
class QuestionReportRequestSerializer(serializers.Serializer):
|
||||
"""دلیل اجباریست تا گزارشها قابلِ دستهبندی باشند؛ توضیح اختیاری."""
|
||||
|
||||
reason = serializers.ChoiceField(choices=QuestionReport.REASON_CHOICES)
|
||||
note = serializers.CharField(required=False, allow_blank=True, max_length=1000)
|
||||
|
||||
|
||||
class QuestionReportResponseSerializer(serializers.Serializer):
|
||||
success = serializers.BooleanField()
|
||||
reportId = serializers.IntegerField()
|
||||
alreadyReported = serializers.BooleanField()
|
||||
|
||||
Reference in New Issue
Block a user