Нет никакой разницы между PUT и PATCH в Django REST Framework - PullRequest
0 голосов
/ 31 октября 2018

Вот мои простые классы viewset и serializer:

class UserSerializer(ModelSerializer):

    class Meta:
        model = User
        fields = ['id', 'email', 'first_name', 'last_name']

....    

class UserViewSet(ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

Предположим, я хочу обновить только имя моего пользователя. В этом случае я должен использовать PATCH {"first_name": "New First Name"}. Но в то же время, похоже, что PUT {"first_name": "New First Name"} также работает так же, хотя и не должно, потому что должно проверять, что все поля указаны. По крайней мере, я так и думал. Я ошибся? И если я, то в чем разница между update и partial_update в Django Rest Framework и есть ли причина оставить их обоих (поскольку любой дополнительный метод подразумевает дополнительное тестирование, поэтому последний вопрос немного философский, потому что похоже, что люди находят эту пару PUT / PATCH действительно запутанной). Кстати, я использую djangorestframework==3.8.2. Спасибо.

1 Ответ

0 голосов
/ 31 октября 2018

Если вы посмотрите на сгенерированный сериализатор, вы обнаружите, что у вас нет обязательных полей. В этом случае PUT и PATCH будут иметь похожее поведение. Было бы какое-нибудь обязательное поле, вы бы увидели разницу.

serializer = UserSerializer(instance=user, data={"first_name": "New First"})
print(serializer)                                                                                                                                                                                  

    UserSerializer(data={'first_name': 'New First'}, instance=<User: tester>):
        id = IntegerField(label='ID', read_only=True)
        email = EmailField(allow_blank=True, label='Email address', max_length=254, required=False)
        first_name = CharField(allow_blank=True, max_length=30, required=False)
        last_name = CharField(allow_blank=True, max_length=150, required=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...