get () вернул более одной Sub_Topic - он вернул 3 - PullRequest
0 голосов
/ 25 января 2019

Я начал проект с использованием 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 голосов
/ 27 января 2019

Если у вас есть основная тема (скажем, «пончики») и много подтем в ней («простые пончики», «шоколадные пончики», «ванильные пончики», ...), вы не можете ссылаться на подтему простоговоря «пончики», вы должны быть более конкретны.

Ваши представления подтем должны принимать идентификатор подтемы, а не идентификатор основной темы.Попробуйте изменить это:

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"])
...