first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 22:27:56 +03:00
commit d9f1ea341e
1021 changed files with 70645 additions and 0 deletions

37
reviews/serializers.py Normal file
View File

@@ -0,0 +1,37 @@
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