Как частично обновить модель в рамках отдыха django? - PullRequest
0 голосов
/ 10 октября 2019

Я построил API с Django, и у меня есть модель изображения, которая включает в себя поле изображения. Я пытаюсь выполнить частичное обновление

Я уже пытался установить partial = True для определения сериализатора

, сериализатор -

class PictureSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Picture
        fields = ("id", "name", "picture", "button_1", "button_2", "button_3", "button_4")
        partial = True

, модель -

class Picture(models.Model):
    name = models.CharField(max_length=250)
    picture = models.ImageField(upload_to="pictures/", null=True, blank=True)
    button_1 = models.BooleanField(default=False)
    button_2 = models.BooleanField(default=False)
    button_3 = models.BooleanField(default=False)
    button_4 = models.BooleanField(default=False)
    printed = models.IntegerField(default=0)

вид

class PictureViewSet(viewsets.ModelViewSet):
    queryset = Picture.objects.all()
    serializer_class = PictureSerializer

1 Ответ

2 голосов
/ 10 октября 2019

Предоставьте ваш ViewSet в urls.py:

router = routers.DefaultRouter()
router.register(r'pictures', PictureViewSet, base_name='picture')

urlpatterns = [
    url(r'', include(router.urls)),
]

Отправьте PATCH запрос с данными JSON, которые вы хотите обновить, до открытой конечной точки. Помните, что запросы PATCH отправляются в конечную точку экземпляра экземпляра, который вы хотите обновить, поэтому ваш URL будет выглядеть следующим образом: .../pictures/<picture_id>.

{
  "name": "updated_name"
}

Вам не нужна часть partial = True.

Также, когда в вашем сериализаторе гораздо меньше исключенных полей, чем включенных полей, вы можете сделать:

class Meta:
    model = Picture
    exclude = ("printed", )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...