我有一个“健身房”的模型和一个“锻炼”的模型:
class Gym(models.Model):
name = models.CharField(max_length=255)
address = models.CharField(max_length=255)
def __str__(self):
return self.name
class Workout(models.Model):
gym = models.ForeignKey(Gym, on_delete=models.CASCADE)
time = models.DateTimeField()我还将向您展示“WorkoutSerializer”:
class WorkoutSerializer(serializers.ModelSerializer):
gym = serializers.StringRelatedField()
class Meta:
model = Workout
fields = ['gym','time']正如您所看到的,健身房在健身json中表示为字段“名称”的字符串。
以下是锻炼的观点:
@api_view(['GET','POST'])
def workout_list(request):
if request.method == 'GET':
queryset = Workout.objects.select_related('gym').all()
serializer = WorkoutSerializer(queryset, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = WorkoutSerializer(data=request.data)
serializer.is_valid(raise_exception=True) # rasis 400 bad request if needed
serializer.save()
return Response('ok')当我尝试用()测试POST请求时,我也希望在POST中使用健身房的str表示形式():
{“健身房”:“健身房2",”活动“:"Yuga",”时间“:”2022-03-07T06:00Z“,”参与者“:"Anna Boing”}
我知道错误:
StringRelatedField.to_internal_value() must be implemented for field知道为什么吗,我能做些什么来解决这个问题?
发布于 2022-03-08 17:10:35
StringRelatedField是一个只读字段.如果要使gym字段可写,则可以使用SlugRelatedField。请注意,段塞字段对应的模型字段与unique=True。
发布于 2022-03-08 17:15:36
我认为StringRelatedField不适合创建对象,
此外,健身房需要一个地址和名字两者,而你只是传递的名字。
为此您可以使用SlugRelatedField。
https://stackoverflow.com/questions/71398847
复制相似问题