Изменить поле модели, если запрошен конкретный URL - PullRequest
0 голосов
/ 22 февраля 2019

Я создаю API, используя django rest framework.Я хочу изменить только одно поле в модели, которое является полем чтения, если я перейду к определенному URL

моей модели:

class Notification(PolymorphicModel):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    created_by = models.ForeignKey(ElsUser, on_delete=models.CASCADE, default=None, related_name="creatednotifications")
    created_on = models.DateTimeField(default=timezone.now)
    created_for = models.ForeignKey(ElsUser, on_delete=models.CASCADE, default=None, related_name="receivednotifications")
    read = models.DateTimeField(default=None, null=True, blank=True)
    message = models.CharField(default=None, blank=True, null=True, max_length=800)

В APis, которые я сделал, перечислены уведомления для входа в систему.user.

Я хочу реализовать следующее:

notification/<:id>/markread

notification/<:id>/markunread

Если я перейду к этому конкретному URL, я хочу изменить поле чтения. Например, сделайте его None, если пометить как непрочитанное.,Также мне нужно проверить, получил ли вошедший в систему пользователь уведомление с этим идентификатором. Я знаю основы и как создать URL

class NotificationMarkRead(generics.UpdateAPIView):
    serializer_class = NotificationSerializer

    def get_queryset(self):
        queryset =  Notification.objects.filter(created_for=self.request.user)

        return queryset 

class NotificationMarkUnread(generics.UpdateAPIView):
    serializer_class = NotificationSerializer

    def get_queryset(self):
        queryset =  Notification.objects.filter(created_for=self.request.user)

        return queryset 

    def update

Моя первоначальная попытка переопределить метод put в представлении update_API

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Поскольку у вас уже есть кодирование с DRF, почему бы не попробовать viewset link .А из front-end просто передайте поля update с запросом put.

0 голосов
/ 22 февраля 2019

Напишите простую функцию:

@api_view(['PUT'])
def notification_toggle_read_status(request, pk, read_status):
    notification = Notification.objects.get(pk=pk)
    if read_status == 'markread':
        notification.read = timezone.now()
    else:
        notification.read = None
    notification.save(update_fields=['read'])
    serializer = NotificationSerializer(instance=notification)
    return Response(serializer.data)

используйте этот путь URL:

notifications/<int:pk>/<string:read_status>/

...