【发布时间】:2021-03-14 05:48:38
【问题描述】:
我有一个 Room 模型,我想将 is_member 布尔字段添加到带有房间的查询集中。怎么能做到这一点?我正在考虑使用.annotate (),但这对我的任务不起作用。
models.py
from django.db import models
class Room(models.Model):
name = models.CharField(max_length=150)
members = models.ManyToManyField(User, blank=True)
views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from .serializers import RoomSerializer
from .models import Room
class RoomView(APIView):
def get(self, request):
rooms = Room.objects.all() # get all rooms
user = request.user # get current user
for room in rooms:
members = room.members.all() # get members
is_member = user in members # set boolean value
room.is_member = is_member # set in room
serializer = RoomSerializer(rooms, many=True)
return Response(serializer.data)
serializers.py
from rest_framework import serializers
from .models import Room
class RoomSerializer(serializers.ModelSerializer)
is_member = serializers.BooleanField(read_only=True)
class Meta:
model = Room
fields = "__all__"
我通过这种方式解决了这个问题,但是还有其他选择吗? 请帮帮我
【问题讨论】:
标签: python python-3.x django django-rest-framework django-queryset