heart
All checks were successful
Deploy to Server / deploy (push) Successful in 38s

This commit is contained in:
jeremygan2021
2026-03-02 20:28:16 +08:00
parent e306ac6f61
commit 2ef1771be0
10 changed files with 198 additions and 7 deletions

View File

@@ -88,12 +88,23 @@ class ReplySerializer(serializers.ModelSerializer):
write_only=True,
required=False
)
like_count = serializers.IntegerField(source='likes.count', read_only=True)
is_liked = serializers.SerializerMethodField()
class Meta:
model = Reply
fields = ['id', 'topic', 'content', 'author', 'author_info', 'reply_to', 'media', 'created_at', 'media_ids', 'is_pinned']
fields = ['id', 'topic', 'content', 'author', 'author_info', 'reply_to', 'media', 'created_at', 'media_ids', 'is_pinned', 'like_count', 'is_liked']
read_only_fields = ['author', 'created_at']
def get_is_liked(self, obj):
request = self.context.get('request')
if not request:
return False
user = get_current_wechat_user(request)
if user:
return obj.likes.filter(id=user.id).exists()
return False
def create(self, validated_data):
media_ids = validated_data.pop('media_ids', [])
reply = super().create(validated_data)
@@ -106,6 +117,8 @@ class TopicSerializer(serializers.ModelSerializer):
replies = ReplySerializer(many=True, read_only=True)
media = TopicMediaSerializer(many=True, read_only=True)
is_verified_owner = serializers.BooleanField(read_only=True)
like_count = serializers.IntegerField(source='likes.count', read_only=True)
is_liked = serializers.SerializerMethodField()
product_info = ESP32ConfigSerializer(source='related_product', read_only=True)
service_info = ServiceSerializer(source='related_service', read_only=True)
@@ -125,10 +138,20 @@ class TopicSerializer(serializers.ModelSerializer):
'related_service', 'service_info',
'related_course', 'course_info',
'view_count', 'is_pinned', 'created_at', 'updated_at',
'is_verified_owner', 'replies', 'media', 'media_ids'
'is_verified_owner', 'replies', 'media', 'media_ids',
'like_count', 'is_liked'
]
read_only_fields = ['author', 'view_count', 'created_at', 'updated_at', 'is_verified_owner', 'status']
def get_is_liked(self, obj):
request = self.context.get('request')
if not request:
return False
user = get_current_wechat_user(request)
if user:
return obj.likes.filter(id=user.id).exists()
return False
def create(self, validated_data):
media_ids = validated_data.pop('media_ids', [])
topic = super().create(validated_data)