Пользовательская проверка Django Rest API VIEWSET по запросу - PullRequest
0 голосов
/ 29 октября 2018

Я новичок в Django Rest Framework.

Вот model.py

PRICE_CHOICES = (
    ('high','High'),
    ('medium', 'Medium'),
    ('low','Low'),
)
class Book(models.Model):
    price = models.CharField(max_length=255)
    status = models.CharField(max_length=255,choices=PRICE_CHOICES)

Мой API views.py:

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

и serializer.py:

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ('id', 'price', 'status')

хотите переопределить поле цены.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

U может использовать проверку разными способами. Ниже приведен образец

    class BookSerializer(serializers.ModelSerializer):
        class Meta:
            model = Book
            fields = ('id', 'price', 'status')

        def create(self, validated_data):
            # logic for creating object
            # you can extract data from validated_data['name'] and then put your logic
            return validated_data

        def update(self, instance, validated_data):
            # logic for updating object
            return instance
0 голосов
/ 29 октября 2018

Вы можете выдать ошибку, когда цена превысит такой лимит.

 class BookSerializer(serializers.ModelSerializer):
        class Meta:
            model = Book
            fields = ('id', 'price', 'status')

        def validate_price(self, data):
             if data > threshold:
                 raise ValidationError(message='...')
             return data

Если вы хотите предупредить пользователя и, основываясь на его ответе, хотите принять решение, вам нужна другая логика. Вам необходимо ввести новую контрольную переменную / param в пост-вводе.

Чтобы установить одну книгу для пользователя в день, переопределите метод проверки в сериализаторе

class BookSerializer(serializers.ModelSerializer):
        class Meta:
            model = Book
            fields = ('id', 'price', 'status')

        def validate_price(self, data):
             if data > threshold:
                 raise ValidationError(message='...')
             return data
        def validate(self, data):
             # your logic, et user detail and date and check it with db. if found raise exception as shown above.
...