Используя параметры в создании viewset? - PullRequest
0 голосов
/ 15 апреля 2019

В конкретном сценарии использования моего приложения я хотел бы сделать некоторую логику (варьируется в зависимости от того, что пользователь выбирает - и, таким образом, передается через URL-адрес API) для создания и возврата модели.

В моем приложении у меня есть простая тестовая модель и модель вопроса (каждый вопрос имеет концепцию:

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, и это вернет ему тест с произвольно выбранными вопросами, относящимися к математике.

в своем URL я явно вызвал 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 Ответ

2 голосов
/ 15 апреля 2019

Если вы имеете в виду, что хотите использовать параметр <str:concept>.Вам нужно указать этот параметр в определении метода представления (post, get, patch, ...), где вы хотите использовать этот параметр.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...