微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Django 模型文本字段中创建、获取和更新 JSON 数据?

如何解决如何在 Django 模型文本字段中创建、获取和更新 JSON 数据?

我看到很多关于这个问题的答案,但我很困惑如何实现这个。

我的要求是:

(创建)首先用键和值创建数据: {"pradip" : 80} 并存储在 user_rate_details 模型字段中。

(更新)第二次在此字段中追加新数据: {"pradip" : 80,"exz" : 70} 并保存。 我认为如何实现这一目标..

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??)

你知道的任何其他最好的方法请告诉我..

谢谢..

解决方法

我真的不明白您的问题,但如果您打算将 json 数据存储在模型字段中,那么您可以尝试...

在您的模型中:

import json

@property
def user_rate_details(self):
     return json.loads(self.user_rate_details)

在您看来:

pk = request.data.get('photo_id')
rate = request.data.get('rate')
photo = self.get_userPhoto(pk)
details = photo.user_rate_detail
details['rate'] = int(rate)
photo.user_rate_details = json.dumps(details)
photo.save(update_fields=['user_rate_details'])
return Response()
,

在模型中创建文本字段并转储或加载 JSON 数据..

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,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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。