正在获取一个列表以响应序列化程序



我正试图在我的序列化程序响应-中做这样的事情

[
{
"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"
}
]

我怎么能做成这样。。这是我的型号。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"

这是我的序列化程序.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中,您需要像对user:那样显式地声明supporting的序列化程序

序列化程序.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', ...]

然后,您可以使用ModelViewSet来获得您要查找的行为:

视图.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' : '...',
...,
}
},
]

最新更新