在创建视图集中使用参数?

时间:2019-04-15 15:46:22

标签: python django serialization django-rest-framework

在我的应用程序的特定用例中,我想做一些逻辑(根据用户选择的内容而定-并因此通过API url传递),以创建并返回模型。

在我的应用程序中,我有一个简单的测试模型和问题模型(每个问题都有一个概念:

class Question(models.Model):

    text = models.CharField(max_length=255, null=False)
    concept = models.CharField(max_length=255, null=False)


class Test(models.Model):

    num_questions = models.IntegerField()
    questions = models.ManyToManyField(Question)

我希望用户能够像这样XXX/api/v1/test/create/Math进行创建,这将使他们返回带有随机选择的与数学有关的问题的测试。

在我的网址中,我明确指定了path('test/create/<str:concept>', CreateTestView.as_view(), name="test-create="),

但是,当我尝试引用它时,它不允许我传递它(未定义概念错误)

class CreateTestView(generics.ListCreateAPIView, concept):

    test = Test()

    ... add random questions to test

    queryset = test
    serializer_class = TestSerializer

1 个答案:

答案 0 :(得分:2)

如果您要使用<str:concept>参数。您需要在所需视图的方法定义中指定该参数(发布,获取,修补程序...) 使用该参数。

class CreateTestView(generics.ListCreateAPIView):

    def post(self, request, concept, *args, **kwargs):
        # use concept param

    def get(self, request, concept, *args, **kwargs):
        # use concept param

    def patch(self, request, concept, *args, **kwargs):
        # use concept param

    # all the methods where you want to use the concept param