获取切片后,断言错误无法筛选查询

2024-05-15 22:01:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我的模特有两个班

class Icd(models.Model):
 code = models.CharField(primary_key=True, max_length=6)

class Icd10(models.Model):
 officialorder = models.IntegerField(blank=True, null=True)

对于上述模型,还有两个视图集

class IcdViewSet(viewsets.ModelViewSet):
 queryset = Icd.objects.all()[:10]
 serializer_class = IcdSerializer

class Icd10ViewSet(viewsets.ModelViewSet):
 queryset = Icd10.objects.all()[:10]
 serializer_class = Icd10Serializer

下面是我的序列化程序

class IcdSerializer(serializers.HyperlinkedModelSerializer):
  class Meta:
    model = Icd
    fields = ['code']

class Icd10Serializer(serializers.HyperlinkedModelSerializer):
  class Meta:
    model = Icd10
    fields = ['officialorder']

和我的应用程序/url.py

router = routers.DefaultRouter()
router.register(r'', views.IcdViewSet)
router.register(r'icd10', views.Icd10ViewSet)
urlpatterns = [
   path('', include(router.urls))
]

main url.py

urlpatterns = [
path('icd/', include('app.urls')),

]

当我调用localhost:8000/icd时,我得到了正确的响应。当我调用localhost:8000/icd/icd10时,我得到了下面的错误

AssertionError at /icd/icd10/
Cannot filter a query once a slice has been taken.
Request Method: GET
Request URL:    http://localhost:8000/icd/icd10/
Django Version: 3.1.4
Exception Type: AssertionError
Exception Value:    
 Cannot filter a query once a slice has been taken.

从Icd10模型检索记录需要更改哪些内容


Tags: 模型truelocalhostmodelmodelscodeclassrouter
2条回答

看起来您对url做了一些错误的操作,因为它发生了冲突 你可以这样做

router = routers.DefaultRouter()
router.register(r'', views.IcdViewSet, basename="icd")
router.register(r'icd10/add_urls', views.Icd10ViewSet, basename="icd10")
urlpatterns = [
   path('', include(router.urls,"api"))
]

这可能会帮助您:

还没有人回答你问题中的“为什么不这样?”。解释见https://docs.djangoproject.com/en/1.8/ref/models/querysets/

even though slicing an unevaluated QuerySet returns another unevaluated QuerySet, modifying it further (e.g., adding more filters, or modifying ordering) is not allowed, since that does not translate well into SQL and it would not have a clear meaning either.

相关问题 更多 >