Files
shopback/reviews/serializers.py
Beyhan Oğur d9f1ea341e first commit
2026-04-26 22:27:56 +03:00

38 lines
1.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from rest_framework import serializers
from django.contrib.contenttypes.models import ContentType
from .models import Rating
class RatingSerializer(serializers.ModelSerializer):
user = serializers.StringRelatedField(read_only=True)
model_name = serializers.CharField(write_only=True) # Örn: 'product'
object_id = serializers.IntegerField()
class Meta:
model = Rating
fields = ['id', 'score', 'comment', 'user', 'created_at', 'model_name', 'object_id']
read_only_fields = ['id', 'created_at', 'user']
def create(self, validated_data):
model_name = validated_data.pop('model_name').lower()
object_id = validated_data.pop('object_id')
user = self.context['request'].user
# Model adından ContentType'ı bul
try:
# app_label='product' varsayımı yapıyoruz veya tüm app'lerde arayabiliriz.
# Daha güvenli olması için app_label'ı da parametre alabiliriz ama şimdilik basit tutalım.
# Genellikle model isimleri unique olur.
content_type = ContentType.objects.get(model=model_name)
except ContentType.DoesNotExist:
raise serializers.ValidationError(f"Model '{model_name}' bulunamadı.")
# Kullanıcının daha önce oy verip vermediğini kontrol et (unique_together constraint var ama burada da yakalayalım)
rating, created = Rating.objects.update_or_create(
content_type=content_type,
object_id=object_id,
user=user,
defaults={'score': validated_data.get('score'), 'comment': validated_data.get('comment')}
)
return rating