|
|
@ -122,7 +122,9 @@ class AdminCourseCategorySerializer(serializers.ModelSerializer): |
|
|
|
|
|
|
|
|
class AdminCourseListSerializer(serializers.ModelSerializer): |
|
|
class AdminCourseListSerializer(serializers.ModelSerializer): |
|
|
category_name = serializers.SerializerMethodField() |
|
|
category_name = serializers.SerializerMethodField() |
|
|
professor_name = serializers.CharField(source='professor.fullname', read_only=True) |
|
|
|
|
|
|
|
|
professor_name = serializers.SerializerMethodField(read_only=True) |
|
|
|
|
|
professors = serializers.PrimaryKeyRelatedField(queryset=ProfessorUser.objects.all(), many=True, required=False) |
|
|
|
|
|
professor = serializers.PrimaryKeyRelatedField(queryset=ProfessorUser.objects.all(), required=False, allow_null=True, write_only=True) |
|
|
participant_count = serializers.SerializerMethodField() |
|
|
participant_count = serializers.SerializerMethodField() |
|
|
thumbnail = serializers.SerializerMethodField() |
|
|
thumbnail = serializers.SerializerMethodField() |
|
|
|
|
|
|
|
|
@ -135,6 +137,7 @@ class AdminCourseListSerializer(serializers.ModelSerializer): |
|
|
'category', |
|
|
'category', |
|
|
'category_name', |
|
|
'category_name', |
|
|
'professor', |
|
|
'professor', |
|
|
|
|
|
'professors', |
|
|
'professor_name', |
|
|
'professor_name', |
|
|
'thumbnail', |
|
|
'thumbnail', |
|
|
'is_online', |
|
|
'is_online', |
|
|
@ -152,6 +155,9 @@ class AdminCourseListSerializer(serializers.ModelSerializer): |
|
|
'created_at' |
|
|
'created_at' |
|
|
] |
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
def get_professor_name(self, obj): |
|
|
|
|
|
return ", ".join([p.fullname for p in obj.professors.all()]) |
|
|
|
|
|
|
|
|
def get_participant_count(self, obj): |
|
|
def get_participant_count(self, obj): |
|
|
return obj.participants.count() |
|
|
return obj.participants.count() |
|
|
|
|
|
|
|
|
@ -171,13 +177,21 @@ class AdminCourseListSerializer(serializers.ModelSerializer): |
|
|
ret['slug'] = get_localized_field(lang, instance.slug) |
|
|
ret['slug'] = get_localized_field(lang, instance.slug) |
|
|
ret['level'] = get_localized_field(lang, instance.level) |
|
|
ret['level'] = get_localized_field(lang, instance.level) |
|
|
ret['status'] = get_localized_field(lang, instance.status) |
|
|
ret['status'] = get_localized_field(lang, instance.status) |
|
|
|
|
|
|
|
|
|
|
|
# Inject legacy fields |
|
|
|
|
|
first_prof = instance.professors.first() |
|
|
|
|
|
ret['professor'] = first_prof.id if first_prof else None |
|
|
|
|
|
ret['professor_name'] = first_prof.fullname if first_prof else "" |
|
|
|
|
|
ret['professors'] = [p.id for p in instance.professors.all()] |
|
|
return ret |
|
|
return ret |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AdminCourseDetailSerializer(serializers.ModelSerializer): |
|
|
class AdminCourseDetailSerializer(serializers.ModelSerializer): |
|
|
slug = serializers.JSONField(required=False, allow_null=True) |
|
|
slug = serializers.JSONField(required=False, allow_null=True) |
|
|
category_name = serializers.SerializerMethodField() |
|
|
category_name = serializers.SerializerMethodField() |
|
|
professor_name = serializers.CharField(source='professor.fullname', read_only=True) |
|
|
|
|
|
|
|
|
professor_name = serializers.SerializerMethodField(read_only=True) |
|
|
|
|
|
professors = serializers.PrimaryKeyRelatedField(queryset=ProfessorUser.objects.all(), many=True, required=False) |
|
|
|
|
|
professor = serializers.PrimaryKeyRelatedField(queryset=ProfessorUser.objects.all(), required=False, allow_null=True, write_only=True) |
|
|
thumbnail = FileFieldSerializer(required=False, allow_null=True) |
|
|
thumbnail = FileFieldSerializer(required=False, allow_null=True) |
|
|
video_file = FileFieldSerializer(required=False, allow_null=True) |
|
|
video_file = FileFieldSerializer(required=False, allow_null=True) |
|
|
participant_count = serializers.SerializerMethodField() |
|
|
participant_count = serializers.SerializerMethodField() |
|
|
@ -191,6 +205,7 @@ class AdminCourseDetailSerializer(serializers.ModelSerializer): |
|
|
'category', |
|
|
'category', |
|
|
'category_name', |
|
|
'category_name', |
|
|
'professor', |
|
|
'professor', |
|
|
|
|
|
'professors', |
|
|
'professor_name', |
|
|
'professor_name', |
|
|
'thumbnail', |
|
|
'thumbnail', |
|
|
'video_type', |
|
|
'video_type', |
|
|
@ -220,6 +235,9 @@ class AdminCourseDetailSerializer(serializers.ModelSerializer): |
|
|
] |
|
|
] |
|
|
read_only_fields = ['id', 'final_price', 'final_price_rub', 'created_at', 'updated_at'] |
|
|
read_only_fields = ['id', 'final_price', 'final_price_rub', 'created_at', 'updated_at'] |
|
|
|
|
|
|
|
|
|
|
|
def get_professor_name(self, obj): |
|
|
|
|
|
return ", ".join([p.fullname for p in obj.professors.all()]) |
|
|
|
|
|
|
|
|
def get_participant_count(self, obj): |
|
|
def get_participant_count(self, obj): |
|
|
return obj.participants.count() |
|
|
return obj.participants.count() |
|
|
|
|
|
|
|
|
@ -229,11 +247,34 @@ class AdminCourseDetailSerializer(serializers.ModelSerializer): |
|
|
lang = get_request_lang(self) |
|
|
lang = get_request_lang(self) |
|
|
return get_localized_field(lang, obj.category.name) |
|
|
return get_localized_field(lang, obj.category.name) |
|
|
|
|
|
|
|
|
|
|
|
def create(self, validated_data): |
|
|
|
|
|
professor = validated_data.pop('professor', None) |
|
|
|
|
|
professors = validated_data.pop('professors', None) |
|
|
|
|
|
instance = super().create(validated_data) |
|
|
|
|
|
if professors is not None: |
|
|
|
|
|
instance.professors.set(professors) |
|
|
|
|
|
elif professor is not None: |
|
|
|
|
|
instance.professors.set([professor]) |
|
|
|
|
|
return instance |
|
|
|
|
|
|
|
|
|
|
|
def update(self, instance, validated_data): |
|
|
|
|
|
professor = validated_data.pop('professor', None) |
|
|
|
|
|
professors = validated_data.pop('professors', None) |
|
|
|
|
|
instance = super().update(instance, validated_data) |
|
|
|
|
|
if professors is not None: |
|
|
|
|
|
instance.professors.set(professors) |
|
|
|
|
|
elif professor is not None: |
|
|
|
|
|
instance.professors.set([professor]) |
|
|
|
|
|
return instance |
|
|
|
|
|
|
|
|
def to_representation(self, instance): |
|
|
def to_representation(self, instance): |
|
|
ret = super().to_representation(instance) |
|
|
ret = super().to_representation(instance) |
|
|
lang = get_request_lang(self) |
|
|
lang = get_request_lang(self) |
|
|
# Keep raw JSON values here so the admin form can edit all language variants, |
|
|
|
|
|
# matching the blog admin flow. |
|
|
|
|
|
|
|
|
# Inject legacy fields |
|
|
|
|
|
first_prof = instance.professors.first() |
|
|
|
|
|
ret['professor'] = first_prof.id if first_prof else None |
|
|
|
|
|
ret['professor_name'] = first_prof.fullname if first_prof else "" |
|
|
|
|
|
ret['professors'] = [p.id for p in instance.professors.all()] |
|
|
return ret |
|
|
return ret |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|