Я использую django restframe в качестве бэкэнда для моего приложения React. когда я создал рекурсивные данные, я отфильтровал представления, чтобы не отображать дочерние компоненты вне родительских компонентов queryset = Data.objects.filter(main__isnull=True)
. Моя проблема в том, что когда я go перехожу к api_link/1/
, он будет GET
компонентом, если он является родительским, но когда я говорю api_link/2/
, я получаю "detail": "Not found."
, потому что я их отфильтровал, но я все еще могу видеть их внутри ребенок, который я назвал sub
, как показано ниже "
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
[
{
"id": 1,
"tag": "div",
"text": "Hello",
"src": "",
"style": "",
"main": null,
"sub": [
{
"id": 2,
"tag": "h1",
"text": "test2",
"src": null,
"style": "",
"main": 1,
"sub": []
},
{
"id": 3,
"tag": "h1",
"text": "test 3",
"src": null,
"style": "",
"main": 1,
"sub": []
}
]
},
{
"id": 4,
"tag": "div",
"text": "bla bla",
"src": "",
"style": "",
"main": null,
"sub": []
}
]
api folder
views.py
from data.models import Data
from .serializers import DataSerializer
from rest_framework import viewsets
class DataVeiwSet(viewsets.ModelViewSet):
serializer_class = DataSerializer
queryset = Data.objects.all()
urls.py
from .views import DataVeiwSet
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register('', DataVeiwSet, basename='user')
urlpatterns = router.urls
searializer.py
from rest_framework import serializers
from data.models import Data
from rest_framework_recursive.fields import RecursiveField
class DataSerializer(serializers.ModelSerializer):
sub = RecursiveField(many=True, required=False)
class Meta:
model = Data
fields = ('id','tag','text','src','style','main','sub')
myapp folder
получено из python manage.py startapp myapp models.py
from django.db import models
from rest_framework.request import Request
class Data(models.Model):
tag = models.CharField(blank=True, null=True, max_length=20)
text = models.TextField(blank=True, null=True)
src = models.URLField(blank=True, null=True)
style = models.TextField(blank=True, null=True)
main = models.ForeignKey(
'self', null=True, blank=True, related_name="sub", on_delete=models.PROTECT)