Django Набор представлений Rest Framework не возвращает правильные данные из набора запросов - PullRequest
1 голос
/ 02 августа 2020

Я новичок в Django Rest Framework и пытаюсь создать API с различными наборами представлений, и почти все работают правильно, кроме одного.

В моем наборе представлений у меня есть 3 набора ModelViewSet: от одного до перечислить все проверки, одна для отображения всех завершенных (выполненных) проверок и последняя для отображения всех отмененных проверок. Проблема в том, что он возвращает список всех проверок правильно, но два других возвращают «деталь: не найдено», хотя у меня есть экземпляры проверок в моей базе данных.

Вот мой набор проверок:

from rest_framework.viewsets import ModelViewSet
from inspections.models import Inspection
from .serializers import InspectionSerializer
from rest_framework import generics

class InspectionViewSet(ModelViewSet):
    queryset = Inspection.objects.all()
    serializer_class = InspectionSerializer


class DoneInspectionsViewSet(ModelViewSet):
    serializer_class = InspectionSerializer

    def get_queryset(self):
        queryset = Inspection.objects.all()
        return queryset


class UndoneInspectionsViewSet(ModelViewSet):
    serializer_class = InspectionSerializer

    def get_queryset(self):
        queryset = Inspection.objects.filter(done=False)
        return queryset

Вот мой сериализатор проверки:

from rest_framework.serializers import ModelSerializer
from inspections.models import Inspection
from properties.api.serializers import PropertySerializer

class InspectionSerializer(ModelSerializer):
    property = PropertySerializer(many=False)
    class Meta:
        model = Inspection
        fields = ('id', 'connected_check', 'category', 'property', 'date',
                  'done_date', 'done_by', 'staff', 'notes', 'done')

Вот модель проверки:

from django.db import models
from check.models import Check
from properties.models import Property
from django.contrib.auth.models import User
from django.urls import reverse
from django.utils import timezone

class Inspection(models.Model):
    connected_check = models.ForeignKey(Check, on_delete=models.DO_NOTHING, null=True, blank=True, related_name='inspection_check')
    category = models.ForeignKey(InspectionCategory, on_delete=models.DO_NOTHING)
    property = models.ForeignKey(Property, on_delete=models.DO_NOTHING, related_name='inspection_property')
    date = models.DateField()
    done_date = models.DateField(blank=True, null=True)
    done_by = models.ForeignKey(User, max_length=25, blank=True, null=True, related_name='inspection_done_by', on_delete=models.DO_NOTHING)
    staff = models.ForeignKey(User, max_length=25, null=True, blank=True, related_name='inspection_staff', on_delete=models.DO_NOTHING)
    notes = models.TextField(max_length=500, blank=True)
    done = models.BooleanField(default=False)

    def __str__(self):
        return self.category.name

    def get_absolute_url(self):
        return reverse("inspections:details",kwargs={'pk':self.pk})

    def get_category_name(self):
        return self.category

    def is_past_due(self):
        return timezone.now() > self.date

    def is_done(self):
        self.done = True
        self.done_date = timezone.now()
        self.save()

А вот шаблоны URL и маршрутизатор:

router = routers.DefaultRouter(trailing_slash=False)
router.register(r'inspection', InspectionViewSet)
router.register(r'inspection/done', DoneInspectionsViewSet, basename='done-inspection')
router.register(r'inspection/undone', UndoneInspectionsViewSet, basename='undone-inspection')

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^admin/', admin.site.urls),
    url(r'^inspections/', include(('inspections.urls','inspections'), namespace='inspections')),
]

urlpatterns += [
    path('api/', include(router.urls)),
    path('api/schema/', get_schema_view(
        title = "DAPIMS",
        description = "API for DAPIMS",
        version = "1.0.0"
    ), name='openapi-schema'),
]

Я уже пытался изменить набор запросов и заметил, что даже если я просто хочу вернуть все объекты Inspection, он все равно возвращает «деталь: не найдено», даже если я запускаю интерактивную оболочку и выполняю тот же набор запросов, он возвращает правильные объекты .

Вот пример возврата из интерактивной оболочки

И это то, что возвращает мой Browsable API

Заранее спасибо!

...