Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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
django rest framework get()返回了多个对象,尽管使用了filter()方法_Django_Django Rest Framework - Fatal编程技术网

django rest framework get()返回了多个对象,尽管使用了filter()方法

django rest framework get()返回了多个对象,尽管使用了filter()方法,django,django-rest-framework,Django,Django Rest Framework,在model.py中,我有两个模型 class student(models.Model): name = models.CharField(max_length=255) registration_number = models.CharField(max_length=255) session = models.CharField(max_length=255) college = models.ForeignKey(to='college', on_dele

model.py
中,我有两个模型

class student(models.Model):
    name = models.CharField(max_length=255)
    registration_number = models.CharField(max_length=255)
    session = models.CharField(max_length=255)
    college = models.ForeignKey(to='college', on_delete=models.CASCADE)

    class Meta:
        db_table = 'student'


class semester(models.Model):
    semester = models.IntegerField()
    student = models.ForeignKey(to='student', on_delete=models.CASCADE)
    sgpa = models.FloatField()
    grade = models.CharField(max_length=255)
    is_fail = models.BooleanField(default=True)

    class Meta:
        db_table = 'semester'
序列化程序类看起来像

class SemesterSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.semester
        fields = ('id', 'semester', 'sgpa', 'grade', 'is_fail',)

class StudentSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.student
        fields = ('id', 'name', 'registration_number', 'college', 'session',)
views.py
包含

class SemesterViewSet(viewsets.ModelViewSet):    
    def get_queryset(self):
        if 'semester' in self.kwargs:
            return models.semester.objects.filter(semester=self.kwargs['semester'])
        else:
            return models.semester.objects.all()

    lookup_field = 'semester'
    serializer_class = serializer.SemesterSerializer
url模式是

router = DefaultRouter()
router.register('semester', views.SemesterViewSet, base_name='semester')
urlpatterns = [
    url(r'', include(router.urls)),
]

当我试图访问
url/sement/8
时,
multipleobjects返回了
exception,并显示
get()返回了一个以上的学期——它返回了2错误消息。这里我没有使用任何
get()
方法。为什么会发生这种情况,解决方案是什么?我需要显示学期的所有结果。

从视图中删除
lookup\u字段
,或将其更改为
lookup\u字段='id'

错误是因为在调用
retrieve()
方法时,该方法内部调用了一个与查询类似的
get\u object()

示例:

semester.objects.get(semester=8)

因此,如果有超过1个学期实例具有相同的
学期
值,则会引发错误

更新-1
尝试覆盖视图中的
retrieve()
方法,

from rest_framework.response import Response


class SemesterViewSet(ModelViewSet):
    def get_queryset(self):
        if 'semester' in self.kwargs:
            return semester.objects.filter(semester=self.kwargs['semester'])
        else:
            return semester.objects.all()

    lookup_field = 'semester'
    serializer_class = SemesterSerializer

    def retrieve(self, request, *args, **kwargs): # Change is here <<
        serializer = self.get_serializer(self.get_queryset(), many=True)
        return Response(data=serializer.data)
来自rest\u framework.response导入响应
类SemesterViewSet(ModelViewSet):
def get_queryset(自我):
如果self.kwargs中的“学期”:
return sement.objects.filter(sement=self.kwargs['sement'])
其他:
return.objects.all()
查找_字段='学期'
serializer_class=semestSerializer

def retrieve(self,request,*args,**kwargs):#这里是Change
self.kwargs['sement']
需要
sement
,所以我不能删除lookup_字段,因为
sement
所以,您试图根据
sement
值检索所有实例?
semester.objects.get(semester=8)
from rest_framework.response import Response


class SemesterViewSet(ModelViewSet):
    def get_queryset(self):
        if 'semester' in self.kwargs:
            return semester.objects.filter(semester=self.kwargs['semester'])
        else:
            return semester.objects.all()

    lookup_field = 'semester'
    serializer_class = SemesterSerializer

    def retrieve(self, request, *args, **kwargs): # Change is here <<
        serializer = self.get_serializer(self.get_queryset(), many=True)
        return Response(data=serializer.data)