django rest extensions drf-extensions TypeError at/data/register() 得到了一个意外的关键字参数 'parents_query_lookups'

标签 django django-rest-framework

我正在尝试使用 drf-extensions 设置一个简单的嵌套路由,但在遵循 docs 时遇到问题,我收到此错误: /data/处的类型错误 register() 得到了一个意外的关键字参数 'parents_query_lookups'

试图实现/data/Survey//Version//Product// 每个调查都有多个版本,这些版本将包含多个产品,例如/data/survey/survey1_name/version/survey1_version1/product/survey1_version_product1/

但目前我有未嵌套的端点

/数据/调查/

/数据/版本/

/数据/产品/

模型.py

class Survey(models.Model):
  survey = models.CharField(choices=SURVEYS, max_length=100)


class Version(models.Model):
  version = models.CharField(choices=DATA_RELEASES, max_length=50)
  survey = models.ForeignKey(Survey)


class Product(models.Model):
  product = models.CharField(choices=PRODUCTS, max_length=100)
  version = models.ForeignKey(Version)

View .py

class SurveyViewSet(NestedViewSetMixin, viewsets.ModelViewSet):
  queryset = Survey.objects.all()
  serializer_class = SurveySerializer
  permission_classes = [permissions.AllowAny]

class VersionViewSet(NestedViewSetMixin, viewsets.ModelViewSet):
  queryset = Version.objects.all()
  serializer_class = VersionSerializer
  permission_classes = [permissions.AllowAny]

class ProductViewSet(NestedViewSetMixin, viewsets.ModelViewSet):
  queryset = Product.objects.all()
  serializer_class = ProductSerializer
  permission_classes = [permissions.AllowAny]

序列化器.py

class SurveySerializer(serializers.HyperlinkedModelSerializer):
  class Meta:
    model = Survey
    fields = ('id', 'survey')

class VersionSerializer(serializers.HyperlinkedModelSerializer):
  class Meta:
    model = Version
    fields = ('id', 'version', 'survey')

class ProductSerializer(serializers.HyperlinkedModelSerializer):
  class Meta:
      model = Product
      fields = ('id', 'product', 'version')

网址.py

router = ExtendDefaultRouter()
router.register(r'surveys', views.SurveyViewSet, base_name='survey')
router.register(r'versions', views.VersionViewSet, parents_query_lookups=['survey']),
router.register(r'products', views.ProductViewSet, parents_query_lookups=['version'])


urlpatterns = [
  url(r'^data/', include(router.urls)),
]

最佳答案

您应该将调用链接到 register(),而不是直接在路由器上调用它们:

网址.py

router = ExtendDefaultRouter()
(router.register(r'surveys', views.SurveyViewSet, base_name='survey')
      .register(r'versions', views.VersionViewSet, parents_query_lookups=['survey']),
      .register(r'products', views.ProductViewSet, parents_query_lookups=['version']))

那是因为 NestedRouterMixin.register() 返回一个 NestedRegistryItem 的实例,它是理解 parents_query_lookups 参数的类。

关于django rest extensions drf-extensions TypeError at/data/register() 得到了一个意外的关键字参数 'parents_query_lookups',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34716278/

相关文章:

python - 在 Django 中使用模型而不是枚举的选择

python - 无法访问登陆页面

python - Django REST Framework 缓存错误

django - 如何在 Django 中导入用户模型并选择所有对象

python - 在 GET 请求上传递 slug 或 id

python - Django 休息框架 : Insert multiple objects in one post request

django - 切片后重新排序查询集

python - django教程: unexpected indent error

javascript - 细节 : "CSRF Failed: CSRF token missing or incorrect."

python - Django REST-Auth 密码重置