Django DRF POST Changes not Persisting (сброс данных после обновления)
Недавно я работал с DRF, и на самом деле могу поделиться кое-чем удивительным :-
Я пытаюсь отправить запрос в конечную точку, которую я создал,
**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__"
И я использую vue js, чтобы отправить запрос следующим образом.
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
Все работает хорошо, но есть одна загвоздка. Всякий раз, когда я пытаюсь сохранить объект в базе данных, он сохраняет его, а затем сбрасывает после обновления конечной точки. Я пробовал много других способов с общим APiView, но это тоже, похоже, не работает.
Может я что-то делаю не так?