django - 获取响应序列化程序的列表
问题描述
我试图在我的序列化程序响应中做这样的事情 -
[
{
"user": {
"hnid": "87481adf-5a6e-4995-bb21-cc4258f97a46",
"username": "Md.AbcAhmeddsf #7TJG2GLQ",
"profile_img": null,
"full_name": "Md. Abc Ahmeddsf"
},
"supporting":
"id":1 ,
"user": {
"hnid": "87481adf-5a6e-4995-bb21-cc4258f97a46",
"username": "Md.AbcAhmeddsf #7TJG2GLQ",
"profile_img": null,
"full_name": "Md. Abc Ahmeddsf"
},
"id":2 ,
"user": {
"hnid": "87481adf-5a6e-4995-bb21-cc4258f97a46",
"username": "Md.AbcAhmeddsf #7TJG2GLQ",
"profile_img": null,
"full_name": "Md. Abc Ahmeddsf"
},
}
]
相反,我得到了这个-
[
{
"user": {
"hnid": "87481adf-5a6e-4995-bb21-cc4258f97a46",
"username": "Md.AbcAhmeddsf #7TJG2GLQ",
"profile_img": null,
"full_name": "Md. Abc Ahmeddsf"
},
"supporting": "c5f408bd-a07f-4ee5-b7a9-b2dee8f67634"
},
{
"user": {
"hnid": "87481adf-5a6e-4995-bb21-cc4258f97a46",
"username": "Md.AbcAhmeddsf #7TJG2GLQ",
"profile_img": null,
"full_name": "Md. Abc Ahmeddsf"
},
"supporting": "d0a04c7b-6399-44db-ba7c-4ef39ae7e59c"
}
]
我怎么能这样..这是我的models.py
class Supports(models.Model):
user = models.ForeignKey(HNUsers, on_delete=models.CASCADE, related_name='supporting_user')
supporting = models.ForeignKey(HNUsers, on_delete=models.DO_NOTHING, related_name="supportings")
is_support = models.BooleanField(blank=True, null=True, default=False)
class Meta:
verbose_name_plural = "Supports"
这是我的Serializer.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = HNUsers
fields = (
'hnid',
'username',
'profile_img',
'full_name',
)
class SupportSerializer(serializers.ModelSerializer):
user = UserSerializer(read_only=True, many=False)
# supporting = SupportingUserSerializer(read_only=True, many=False)
class Meta:
model = Supports
fields = (
'user',
'supporting',
)
这是我的意见.py
@api_view(['GET', 'POST'])
@permission_classes((permissions.AllowAny,))
@parser_classes([FormParser, MultiPartParser])
def create_support(request):
data = request.data
print(data)
if request.method == 'POST':
serializer = SupportSerializer(data=request.data)
print(serializer.is_valid())
if serializer.is_valid():
try:
support_field = Supports.objects.get(user=data['user'], supporting=data['supporting'])
print("dsajdsadlsa")
print("sadsadsad",support_field)
if support_field.is_support == True:
return Response({"Error": "You have already supported the user"}, status=status.HTTP_400_BAD_REQUEST)
except Supports.DoesNotExist:
serializer.save(is_support=True)
return Response({"Success": "You have successfully supporting the user"}, status=status.HTTP_201_CREATED)
if request.method == 'GET':
data = Supports.objects.filter(user=data['user'])
serializer = SupportSerializer(data, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
非常感谢您对此的任何帮助
解决方案
在你的SupportSerializer
你需要明确声明序列化程序,supporting
就像你做的那样user
:
序列化程序.py
class UserSerializer(ModelSerializer):
class Meta:
model = HNUsers
fields = [...]
class SupportSerializer(ModelSerializer):
user = UserSerializer(...)
supporting = UserSerializer(...) # add this line
class Meta:
model = Supports
fields = ['user', 'supporting', ...]
然后,您可以使用 aModelViewSet
来获取您正在寻找的行为:
视图.py
from rest_framework import viewsets
class SupportViewSet(viewsets.ModelViewSet):
serializer_class = SupportSerializer
queryset = Supports.objects.order_by('id')
现在您的 json 响应应如下所示:
[
{
'id' : 1,
'user' : {
'hnid' : '...',
'username' : '...',
...,
},
'supporting' : {
'hnid' : '...',
'username' : '...',
...,
}
},
{
'id' : 2,
'user' : {
'hnid' : '...',
'username' : '...',
...,
},
'supporting' : {
'hnid' : '...',
'username' : '...',
...,
}
},
]
推荐阅读
- html - 外部 css(如何将图像与文章水平对齐)
- node.js - 数组内的 Firestore serverTimeStamp
- python - 不了解此 TypeError 异常的原因
- python - 范围对象的比较
- java - 以编程方式在 TestNG xml 套件中设置测试参数以进行并行执行
- c# - 如何截断十进制值然后在 Linq.Expressions c# 中进行比较
- python - 如何在 python 中用颜色显示、更新和旋转 3d 点?
- javascript - javascript中的fetch()不是从JSON制作表格
- sql - PL/SQL:使用游标的主从循环
- ruby-on-rails - Rails 管理员导入失败,属于关系