Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何让Django引用名称而不是id/pk_Python_Django_Rest_Django Models_Django Rest Framework - Fatal编程技术网

Python 如何让Django引用名称而不是id/pk

Python 如何让Django引用名称而不是id/pk,python,django,rest,django-models,django-rest-framework,Python,Django,Rest,Django Models,Django Rest Framework,我目前正在使用Python和Django编写一个教程API。我希望导师模型显示所有的导师(是的,这是一个词),导师显示导师。现在,它工作正常,但它引用了模型的id/pk,所以我真的不知道它指的是谁或什么 获得辅导: { "id": 1 "full_name": "First Last", "email": "email@emailprovidercom", "tutor": 1

我目前正在使用Python和Django编写一个教程API。我希望导师模型显示所有的导师(是的,这是一个词),导师显示导师。现在,它工作正常,但它引用了模型的id/pk,所以我真的不知道它指的是谁或什么

获得辅导:

{
"id": 1
"full_name": "First Last",
"email": "email@emailprovidercom",
"tutor": 1,
"subjects": "SubjectX"
}
正如你所看到的,导师是一个数字而不是一个名字

找个家庭教师:

 {
    "id": 1,
    "full_name": "First Last",
    "email": "name.name@emailprovider.com",
    "notes": "XXXXX XX XX X X  X X X  X XXXXXX XX X X  X X ",
    "tutees": [
        1
    ]
}
同样的事情也发生在这里

我正在使用Django Rest框架

我的模型

class Tutor(models.Model):
    full_name = models.CharField(max_length=40)
    email = models.EmailField()
    notes = models.TextField()

    def __str__(self):
        return self.full_name


class Tutee(models.Model):
    full_name = models.CharField(max_length=40)
    email = models.EmailField()
    tutor = models.ForeignKey(Tutor, on_delete=models.CASCADE, related_name="tutees")
    subjects = models.CharField(max_length=13)

    def __str__(self):
        return self.full_name
我的序列化程序

class TutorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Tutor
        fields = ['id', 'full_name', 'email', 'notes', 'tutees']


class TuteeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Tutee
        fields = ['id', 'full_name', 'email', "tutor", "subjects"]
我的视图集

class TutorAPI(viewsets.ModelViewSet):
    queryset = Tutor.objects.all()
    serializer_class = TutorSerializer
    permission_classes = [permissions.IsAuthenticated]
    lookup_field = "full_name"


class TuteeAPI(viewsets.ModelViewSet):
    queryset = Tutee.objects.all()
    serializer_class = TuteeSerializer
    permission_classes = [permissions.IsAuthenticated]
    lookup_field = "full_name"

如果你需要更多,请评论,我将编辑我的问题!即使您只是将其标记为重复,这也会很有帮助。

如果您只想获得字符串表示,这可能会有所帮助

class TuteeSerializer(serializers.ModelSerializer):
    tutor = serializers.StringRelatedField(many=True)
    class Meta:
        model = Tutee
        fields = ['id', 'full_name', 'email', "tutor", "subjects"]

获取pk或名称可能对您没有意义。您应该同时获得两个或更多字段。根据您的需求,嵌套序列化程序可能是一个很好的解决方案

您可能会看到这样的情况:

class TutorSerializer(serializers.ModelSerializer):
类元:
模型=导师
字段=['id'、'全名'、'电子邮件',]
类TuteeSerializer(serializers.ModelSerializer):
导师信息=TutorSerializer()
类元:
模特=短裙
字段=['id'、'全名'、'电子邮件'、'导师信息'、'科目']

这对另一个序列化程序有效。(导师)不是导师。我删除了导师的many=True,效果很好!非常感谢。这里的解决方案可能是嵌套序列化程序。获得导师的名字对你来说也没有意义,因为这可能不是唯一的。Id/Pk仍然是有意义的,因为它表示系统中有一个导师。我删除了many=True,它成功了。我怎么可能只从它那里得到名字、电子邮件等,而不是所有的东西呢。现在,我也得到了导师的辅导,这有点重复。没关系,我对另一个人的答案做了一些编辑,它起作用了。你可以编辑
导师序列器,只包括
id
name
。我想您没有注意到我对
TutorSerializer
所做的更改。请仔细看一下。