如果有特殊要求,请更改模型字段 url
Change model field if requested particular url
我正在 API 使用 django rest 框架。如果我转到特定的 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)
我制作的 API 列出了登录用户的通知。
我想要实现的是:
notification/<:id>/markread
notification/<:id>/markunread
如果我转到这个特定的url,我想修改已读字段..例如,如果标记为未读,请将其设置为None。我还需要检查登录用户是否收到通知 id.I 了解基础知识以及如何创建 urls
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
我最初的尝试是覆盖 update_API 视图中的 put 方法
写一个简单的函数:
@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>/
因为您已经使用 DRF
进行编码,为什么不尝试使用 viewset
link 。从前端只需通过放置请求传递更新字段。
我正在 API 使用 django rest 框架。如果我转到特定的 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)
我制作的 API 列出了登录用户的通知。
我想要实现的是:
notification/<:id>/markread
notification/<:id>/markunread
如果我转到这个特定的url,我想修改已读字段..例如,如果标记为未读,请将其设置为None。我还需要检查登录用户是否收到通知 id.I 了解基础知识以及如何创建 urls
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
我最初的尝试是覆盖 update_API 视图中的 put 方法
写一个简单的函数:
@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>/
因为您已经使用 DRF
进行编码,为什么不尝试使用 viewset
link 。从前端只需通过放置请求传递更新字段。