'Django DRF POST Changes not Persisting (Resets Data after Refresh)
I have been working with DRF recently , and actually have something surprising to share :-
I try to post the request to an endpoint that i have created ,
**views.py**
class SettingsAPI(APIView):
@classmethod
def post(self,request,pk):
shop_token = request.session.get('shop_token') if request.session.get('shop_token') else ""
shop_domain = request.session.get('shop_domain') if request.session.get('shop_domain') else ""
store = Store.find_store_by_url(shop_domain)
if not store:
return JsonResponse({'status':'failed','msg':'invalid request'})
data = json.loads(json.dumps(request.data))
settings = get_object_or_404(Setting,pk=pk)
serializer = SettingSerializer(settings, data = request.data)
if serializer.is_valid():
serializer.save()
return JsonResponse({'status':'success'})
@classmethod
def get(self,request,pk):
settings = get_object_or_404(Setting,pk=pk)
if settings:
serializer = SettingSerializer(settings)
return JsonResponse({'status':'success','data':serializer.data})
return JsonResponse({'status':'failed'})
**urls.py**
path('v1/page/settings/<int:pk>',SettingsAPI.as_view(),name='pagerud-settings-api'),
**serializer.py**
class SettingSerializer(serializers.ModelSerializer):
class Meta:
model = Setting
fields = "__all__"
And i am using vue js , to send the request like this.
const settings_data = {
"store": this.store.store_id,
"header_background_color": `${this.settings.header_background_color}`,
"header_font_color": `${this.settings.header_font_color}`,
"page_background_color": `${this.settings.page_background_color}`,
"card_background_color": `${this.settings.card_background_color}`,
"card_font_color": `${this.settings.card_font_color}`,
"header_message": `${this.settings.header_message}`,
"header_message_optional": `${this.settings.header_message_optional}`,
"button_background_color": `${this.settings.button_background_color}`,
"button_font_color": `${this.settings.button_font_color}`
}
models.py
class Setting(models.Model):
header_background_color = models.CharField(max_length=200,null=True,blank=True,default='#212529')
header_font_color = models.CharField(max_length=200,null=True,blank=True,default='white')
page_background_color = models.CharField(max_length=200,null=True,blank=True,default='white')
card_background_color = models.CharField(max_length=200,null=True,blank=True,default='whitesmoke')
card_font_color = models.CharField(max_length=200,null=True,blank=True,default='white')
button_background_color = models.CharField(max_length=200,null=True,blank=True,default='#212529')
header_message = models.CharField(max_length=200,null=True,blank=True,default="""Hi, Add Your Greeting Message here""")
header_message_optional = models.CharField(max_length=200,null=True,blank=True , default="Thanks for purchasing the order")
button_font_color = models.CharField(max_length=200,null=True,blank=True,default='white')
store = models.OneToOneField(
Store,
on_delete=models.CASCADE,
primary_key=True,
related_name='settings'
)
def __str__(self) -> str:
return self.store.store_name
All works well, but there's a catch here Whenever i try to save the object to database , it saves it and then resets it after i refresh the endpoint. I have tried many other ways with generic APiView too. but that too does not seem to work.
Anything i am doing wrong here ?
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
