我正试图在我的序列化程序响应-中做这样的事情
[
{
"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' : '...',
...,
}
},
]