Разрешить максимальное количество вариантов выбора поля m2m в viewset - PullRequest
0 голосов
/ 05 октября 2019

Я хочу разрешить пользователям выбирать максимум 2 жанра. Я попытался добавить в models.py, но произошла ошибка. Теперь я думаю о добавлении кода для проверки количества выбранных жанров в views.py или, возможно, в Serializer.

class Story(models.Model):
    genre = models.ManyToManyField(Genre)
    def clean(self, *args, **kwargs):
         if self.genre.count() > 2:
             raise ValidationError('Error')
         super(Story, self).clean(*args, **kwargs)


class StorySerializer(serializers.ModelSerializer):
    genre = GenreSerializer(read_only=True, many=True)
    ...

class StoryView(viewsets.ModelViewSet):
    queryset = Story.objects.all()
    serializer_class = StorySerializer

    def perform_create(self, serializer):
        serializer.save(author=self.request.user)

1 Ответ

0 голосов
/ 05 октября 2019

См. https://docs.djangoproject.com/en/2.2/topics/db/examples/many_to_many/

Проблема заключается в том, что вам необходимо сохранить объекты в базе данных, прежде чем вы сможете создать отношения «многие ко многим». Попробуйте это:

def clean(self, *args, **kwargs):
         self.save()
         if self.genre.count() > 2:
             raise ValidationError('Error')
         super(Story, self).clean(*args, **kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...