首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"StringRelatedField.to_internal_value()“必须实现为字段”错误

"StringRelatedField.to_internal_value()“必须实现为字段”错误
EN

Stack Overflow用户
提问于 2022-03-08 17:04:12
回答 2查看 321关注 0票数 0

我有一个“健身房”的模型和一个“锻炼”的模型:

代码语言:javascript
复制
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”:

代码语言:javascript
复制
class WorkoutSerializer(serializers.ModelSerializer):
    gym = serializers.StringRelatedField()
    class Meta:
        model = Workout
        fields = ['gym','time']

正如您所看到的,健身房在健身json中表示为字段“名称”的字符串。

以下是锻炼的观点:

代码语言:javascript
复制
@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”}

我知道错误:

代码语言:javascript
复制
StringRelatedField.to_internal_value() must be implemented for field

知道为什么吗,我能做些什么来解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2022-03-08 17:10:35

StringRelatedField是一个只读字段.如果要使gym字段可写,则可以使用SlugRelatedField。请注意,段塞字段对应的模型字段与unique=True

票数 0
EN

Stack Overflow用户

发布于 2022-03-08 17:15:36

我认为StringRelatedField不适合创建对象,

此外,健身房需要一个地址和名字两者,而你只是传递的名字。

为此您可以使用SlugRelatedField

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71398847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档