Suponer
class Post(models.Model): content = ... image = ... timestamp = ... class PostLike(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL,...) post = models.ForiegnKey(Post,...) timestamp = ...y
class PostSerializer(serializers.ModelSerializer): class Meta: model = Post fields = ("content","image","timestamp","liked")Aquí me gustó podría ser verdadero o falso. Será cierto si el usuario (request.user) está en PostLike.
¿Cómo creo ese campo de Me gusta?
vista
@login_required() def AllPosts(request): obj = Posts.objects.all() serializer = PostSerializer(obj, many=True) result = JsonResponse(serializer.data, safe=False) return resultSu serializador ya tiene un campo para el atributo Me liked , lo único que falta es un campo:
class PostSerializer(serializers.ModelSerializer): liked = serializers.BooleanField(read_only=True) class Meta: model = Post fields = ('content', 'image', 'timestamp', 'liked') Lo que necesita es un QuerySet donde las publicaciones tengan un atributo adicional .liked . Puede anotar los objetos Post con un atributo adicional que especifique si el objeto gustó:
from django.db.models import Exists, OuterRef def @login_required def AllPosts(request): obj = Posts.objects.get_queryset(*args, **kwargs).annotate( liked=Exists( PostLike.objects.filter(user=request.user, post_id=OuterRef('pk') ) ) ) serializer = PostSerializer(obj, many=True) result = JsonResponse(serializer.data, safe=False) return result