我有一个学生桌和一个大学桌。
我似乎无法根据学生拥有的university_id来检索大学名称
数据库:
学生:
id, first_name, last_name, university_id
0, bob, jones, 12
1, Tim, Smith, 13
大学:
id, name
12 Harvard
13 Stanton
14 N/A
Models.py
from django.db import models
class University(models.Model):
name = models.CharField(max_length=50)
class Meta:
verbose_name = "University"
verbose_name_plural = "Universities"
#__unicode__
def __str__(self):
return self.name
class Student(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
university = models.ForeignKey(University, on_delete=models.DO_NOTHING)
class Meta:
verbose_name = "Student"
verbose_name_plural = "Students"
#__str__
def __str__(self):
return '%s %s' % (self.first_name, self.last_name)
views.py
class View_all_apiview(APIView):
def get(self, request, *args, **kwargs):
students_q = Student.objects.all().prefetch_related('university')
return JsonResponse(list(students_q.values()), safe=False)
我尝试使用“ students_q.name”来获得大学名称,但这会出错。
答案 0 :(得分:0)
您正在使用Rest Framework。因此,您应该使用序列化程序来确定要显示的字段。
class StudentSerializer(serializers.ModelSerializer):
university = serializers.StringRelatedField()
class Meta:
model = Student
fields = ('id', 'first_name', 'last_name', 'university')
在这里,StringRelatedField
使用相关模型的__str__
方法,在您的情况下,使用名称。
现在您的视图可以是:
class AllStudents(ListAPIView):
queryset = Student.objects.all().select_related('university')
serializer_class = StudentSerializer
请注意,要遵循前向关系,请使用select_related
而不是prefetch_related
。