Django REST -在一个GET-Response中发送多个查询集



我的视图目前接受一个用户名,如果该用户存在,它将返回一个包含Model中所有条目的查询集,其中对应的userid适合。模型UserProject由UserID和ProjectID组成,两者都是对它们自己的表的引用。我想将项目模型添加到查询集。

我的观点:

class GetUserDataByNameView(
APIView,
):
def get(self, request, username):
if User.objects.filter(username = username).exists():
uid = User.objects.get(username = username).id
queryset = Userproject.objects.filter(user_id = uid)
readSerializer = UserprojectSerializer(queryset, many = True)
return Response(readSerializer.data)
else:
return Response({"status": "error", "data":"no user with this username"}, status = 200)

当前响应如下所示:

[
{
"id": 16,
"created_at": "2021-10-20T16:05:03.757807Z",
"updated_at": "2021-10-20T16:05:03.762307Z",
"user": 3,
"project": 50
},
{
"id": 17,
"created_at": "2021-10-20T16:27:59.938422Z",
"updated_at": "2021-10-20T16:27:59.945439Z",
"user": 3,
"project": 51
#"projectname": (from ProjectID 51)
#"projectDescriptor":
#" other stuff from ProjectModel":
}
]

那么我如何为当前项目插入字段呢?如果我在代码中做了一些无用的东西,请告诉我。Django中的Newbie

序列化器:

from rest_framework import serializers
from .models import Project
from .models import Userproject
class ProjectSerializer(serializers.ModelSerializer):
name = serializers.CharField(max_length = 500, required = True)
descriptor = serializers.CharField(max_length = 1000,  default = None)
class Meta:
model = Project
fields = '__all__'
class UserprojectSerializer(serializers.ModelSerializer):
class Meta:
model = Userproject
fields = '__all__'

模型:

from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Project(models.Model):
id = models.AutoField(db_column = 'db_ID', primary_key = True)
name = models.CharField(max_length=500, default = None)
descriptor = models.CharField(max_length = 1000, null = True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'projects'
def __str__(self):
return self.name


class Userproject(models.Model):
id = models.AutoField(db_column = 'db_ID', primary_key = True)
user = models.ForeignKey(User, on_delete= models.SET_NULL, null = True)
project = models.ForeignKey('Project', on_delete = models.SET_NULL, null = True)
created_at = models.DateTimeField(auto_now_add=True, null=True)
updated_at = models.DateTimeField(auto_now=True, null = True)
class Meta:
db_table = 'UserProjects'
def __str__(self):
return self.id

class UserprojectSerializer(serializers.ModelSerializer):
projects = ProjectSerializer(many=True, read_only=True)
class Meta:
model = Userproject
fields = ['projects','id','user',]

您需要将Project data传递给UserProject Serializer,我还提到了many=True,因为User连接到ForeignKey,因此用户可以拥有多个projects

class ProjectSerializer(serializers.ModelSerializer):
name = serializers.CharField(max_length = 500, required = True)
descriptor = serializers.CharField(max_length = 1000,  default = None)
class Meta:
model = Project
fields = ['name','descriptor']