I seen many answer related this problem but I confused how to implement this.
My requirement is:
(Create)First create data with key and value:
{"pradip" : 80}
and store in user_rate_details
model field.
(Update)Second time append new data in this field :
{"pradip" : 80,"exz" : 70}
and save it.
How to achieve this in my views..
models.py:
class UserPhoto(models.Model):
user = models.ForeignKey(to = User,on_delete = models.CASCADE,related_name='userPhoto')
......
rated_by = models.ManyToManyField(Profile,blank=True,related_name='rate_by')
user_rate_details = models.TextField() ⬅⬅⬅⬅⬅ Here store JSON data
created_date = models.DateTimeField(auto_now_add=True)
views.py:
class PhotoRate(APIView):
permission_classes = [IsAuthenticated]
def get_userPhoto(self,pk):
try:
return UserPhoto.objects.get(id = pk)
except UserPhoto.DoesNotExist:
raise Http404
def post(self,request,formate = None):
pk = request.data.get('photo_id')
rate = request.data.get('rate')
photo = self.get_userPhoto(pk)
???????? How to create or update Json data here???
return Response(??JSON DATA??)
Any other best way you know please tell me..
Thank you..
Create Text field in model and dump or load JSON data..
models.py:
import json
class UserPhoto(models.Model):
user = models.ForeignKey(to = User,on_delete = models.CASCADE,related_name='userPhoto')
......
rated_by = models.ManyToManyField(Profile,blank=True,related_name='rate_by')
user_rate_details = models.TextField(default="{}")
created_date = models.DateTimeField(auto_now_add=True)
@property
def rate_details(self):
return json.loads(self.user_rate_details)
views.py:
class PhotoRate(APIView):
permission_classes = [IsAuthenticated]
def get_userPhoto(self,pk):
try:
return UserPhoto.objects.get(id = pk)
except UserPhoto.DoesNotExist:
raise Http404
def post(self,request,formate = None):
pk = request.data.get('photo_id')
rate = request.data.get('rate')
photo = self.get_userPhoto(pk)
user_dict = photo.rate_details
user_dict[self.request.user.username] = int(rate)
photo.user_rate_details = json.dumps(user_dict)
photo.save(update_fields=['user_rate_details'])
return Response({"Success" : "Rate submited!!"},status=status.HTTP_200_OK)
def patch(self,request,formate=None):
pk = request.data.get('photo_id')
photo = self.get_userPhoto(pk)
rate_detail = photo.rate_details
return Response({"Rated Users" : rate_detail},status=status.HTTP_200_OK)