get()返回了多个Sub_Topic-返回了3

时间:2019-01-25 11:37:21

标签: python-3.x django-rest-framework django-views

我已经使用Django启动了一个项目。我在哪里使用staticid在一个主要主题下添加了多个子主题。当我向多个子主题提供相同的staticid时,我得到下面的错误(get() returned more than one Sub_Topic -- it returned 3!)。

型号:

class Sub_Topic(models.Model):
    IMPORTANCE_SCORE = (
        ('LOW','Low'),
        ('NORMAL', 'Normal'),
        ('HIGH','High'),
    )
    staticid = models.ForeignKey(SID,on_delete=models.CASCADE, blank=True, default=None, null=True)
    sub_topic = models.CharField(max_length=250)
    Num_Of_Sub_subTopics =  models.PositiveIntegerField(default=0)
    Num_Of_Questions = models.PositiveIntegerField(default=0)
    importance = models.CharField(max_length=6, choices= IMPORTANCE_SCORE, default='LOW')
    complexity = models.PositiveIntegerField(default=0)
    prerequisite = models.CharField(max_length=250)

    def __str__(self):
        return self.sub_topic

查看:

class Sub_TopicDetailView(generics.RetrieveUpdateDestroyAPIView):
    """
    GET sub_topic/:id/
    PUT sub_topic/:id/
    DELETE sub_topic/:id/
    """
    queryset = Sub_Topic.objects.all()
    serializer_class = Sub_TopicSerializer

    def get(self, request, *args, **kwargs):
        try:
            a_sub_topic = self.queryset.get(staticid=kwargs["staticid"])
            return Response(Sub_TopicSerializer(a_sub_topic).data)
        except Sub_Topic.DoesNotExist:
            return Response(
                data={
                    "message": "Sub_Topic with id: {} does not exist".format(kwargs["staticid"])
                },
                status=status.HTTP_404_NOT_FOUND
        )

    @validate_request_data
    def put(self, request, *args, **kwargs):
        try:
            a_sub_topic = self.queryset.get(staticid=kwargs["staticid"])
            serializer = Sub_TopicSerializer()
            updated_sub_topic = serializer.update(a_sub_topic, request.data)
            return Response(Sub_TopicSerializer(updated_sub_topic).data)
        except Sub_Topic.DoesNotExist:
            return Response(
                data={
                    "message": "Sub_Topic with id: {} does not exist".format(kwargs["staticid"])
                },
                status=status.HTTP_404_NOT_FOUND
            )

错误:

get() returned more than one Sub_Topic -- it returned 3!

我该如何克服呢?

1 个答案:

答案 0 :(得分:0)

如果您有一个主要主题(例如,“甜甜圈”)和其中的许多子主题(“普通甜甜圈”,“巧克力甜甜圈”,“香草甜甜圈” ...),则不能仅引用一个子主题说“甜甜圈”,您必须更加具体。

您的子主题视图应接受子主题ID,而不是主主题ID。尝试更改此内容:

a_sub_topic = self.queryset.get(staticid=kwargs["staticid"])
# 'staticid' is the foreign key of the main topic: it is
# the same for many sub-topics!

对此:

a_sub_topic = self.queryset.get(id=kwargs["id"])
# 'id' is the primary key field generated automatically by Django:
# it's unique for every sub-topic

如果您想显示给定主题的所有子主题,则应使用filter()而不是get()

sub_topics = self.queryset.filter(staticid=kwargs["staticid"])