【发布时间】:2021-04-26 03:29:41
【问题描述】:
我目前正在使用 Python 和 Django 开发一个辅导 API。我希望 Tutor Model 向所有 tutees 展示(是的,这是一个词),并且 tutee 向 Tutor 展示。现在,它可以正常工作,但它引用了模型的 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"
如果您需要更多,请发表评论,我将编辑我的问题!即使您只是将其标记为重复,也会很有帮助。
【问题讨论】:
-
这里的解决方案可能是嵌套序列化器。获取导师的名字对你来说也没有意义,因为这可能不是唯一的。 Id/Pk 仍然有意义,因为它表示系统中的一位导师。
标签: python django rest django-models django-rest-framework