I am learning Django and DRF, I am having issues updating the field expire_on
. And there also I have to put the logic to prevent to put the value of expore_on
no greater than 7 days from created_on
. I am having trouble figuring out how to update the same and write the above logic.
I have tried:
- update function in DRF viewset.Viewset
- Django Rest Framework not showing form fields for PATCH/PUT request
- Django REST Framework doesn't display value in PUT form
- Django form fields not showing up
Models
class Url_data(models.Model):
uri_id = models.AutoField(primary_key=True)
actual_url = models.URLField()
created_on = models.DateTimeField(
auto_now_add=True, editable=False, auto_now=False)
expire_on = models.DateTimeField()
short_url = models.URLField(max_length=200, editable=False)
clicks = models.PositiveBigIntegerField(
default=0, editable=True, blank=True)
Serializer
class Url_dataSerializer(serializers.ModelSerializer):
class Meta:
model = Url_data
fields = '__all__'
read_only_fields = ['short_url', 'created_on', 'clicks']
class ExpireDateUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = Url_data
fields = ('expire_on', )
View
class UrlList(generics.ListCreateAPIView):
queryset = Url_data.objects.all()
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
serializer_class = Url_dataSerializer
class UrlDetail(generics.RetrieveDestroyAPIView):
queryset = Url_data.objects.all()
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
serializer_class = Url_dataSerializer
class ExpireDateUpdate(generics.UpdateAPIView):
queryset = Url_data.objects.all()
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
serializer_class = ExpireDateUpdateSerializer
URls (in-app)
urlpatterns = [
path("", index, name="home"),
path("urls/", UrlList.as_view()),
path("urls/<int:pk>/", UrlDetail.as_view()),
path("urls/<int:pk>/", ExpireDateUpdate.as_view()),
]
Error
405
Undocumented
Error: Method Not Allowed
**Response body**
{
"detail": "Method \"PATCH\" not allowed."
}
**Response headers**
access-control-allow-origin: *
allow: GET,DELETE,HEAD,OPTIONS
content-length: 42
content-type: application/json
cross-origin-opener-policy: same-origin
date: Fri,07 Jan 2022 22:19:09 GMT
referrer-policy: same-origin
server: WSGIServer/0.2 CPython/3.8.10
vary: Accept,Origin
x-content-type-options: nosniff
x-frame-options: DENY
Please help, Thanks in advance.