【问题标题】:Django saving json value to database/modelDjango 将 json 值保存到数据库/模型
【发布时间】:2016-07-07 12:56:21
【问题描述】:

我是 django 新手,我正在尝试将 json 保存到数据库。问题是我能够在我的视图中获取数据,但不确定如何将其保存在数据库中。我正在尝试保存 cmets

models.py

class Post(models.Model):
    title=models.CharField(max_length=200)
    description=models.TextField(max_length=10000)
    pub_date=models.DateTimeField(auto_now_add=True)
    slug = models.SlugField(max_length=40, unique=True)

    def __unicode__(self):
        return self.title


class Comment(models.Model):
    title=models.ForeignKey(Post)
    comments=models.CharField(max_length=200)

    def __unicode__(self):
        return '%s' % (self.title)

serializer.py

class CommentSerializer(serializers.ModelSerializer):
    id = serializers.CharField(source="title.id", read_only=True)
    title = serializers.CharField(source="title.title", read_only=True)

class Meta:
    model = Comment
    fields = ('id','title','comments')


class PostSerializer(serializers.ModelSerializer):

    class Meta:
        model = Post
        fields = ('id','title','description','pub_date')

请帮我将视图中的数据保存到数据库

view.py

def add_comments(request):
    if 'application/x-www-form-urlencoded' in request.META['CONTENT_TYPE']:
        print 'hi'
        data = json.loads(request.body)
        comment = data.get('comment', None)
        id = data.get('id', None)
        title = data.get('title', None) 
        ....................# not sure how to save to database
       pass

提前谢谢........如果有更好的方法请告诉我......

【问题讨论】:

    标签: python json django


    【解决方案1】:

    如果您使用 Postgres,您可以使用 JSONField (read more) 存储 json,但如果没有,则需要使用 json.dumps(data) 将 json 解析为字符串并使用 CharField/TextField 保存。要恢复数据,请使用 json 字符串与 json.loads(json_string) 进行 dict

    记得导入json库:import json

    【讨论】:

      【解决方案2】:

      假设一个模型:

      class User(models.Model):
        name = models.CharField()
        phone_number = models.CharField()
      

      发送{"name":"Test User", "phone_number":"123-456-7890"}的json

      在视图中,您可以执行以下操作将其保存到数据库中。

      def SaveUser(request):
        body_unicode = request.body.decode('utf-8')
        body = json.loads(body_unicode)
        u = User(**body)
        u.save()
        return JsonResponse({"result": "OK"})
      

      【讨论】:

        【解决方案3】:

        如果我清楚地理解了你的问题 你的视图应该是这样的。

        def add_comments(request):
            if 'application/x-www-form-urlencoded' in request.META['CONTENT_TYPE']:
                print 'hi'
                data = json.loads(request.body)
                comment = data.get('comment', None)
                id = data.get('id', None)
                title = data.get('title', None) 
        
                post = Post.objects.get(id = id)
                com = Comment()
                com. comments = comment
                com.title = post
                com.save()
        

        【讨论】:

        • 感谢您的回复...是的,这就是所需要的.........有没有更好的存储数据的方法...而不是单独添加数据..... .?
        • django 中的(反)序列化
        【解决方案4】:

        如果要存储完整的 JSON,请尝试使用 django-jsonfield 项目:https://github.com/dmkoch/django-jsonfield

        【讨论】:

          【解决方案5】:

          根据 Django doc 你可以使用:

          from django.contrib.postgres.fields import JSONField
          from django.db import models
          
          class Dog(models.Model):
              name = models.CharField(max_length=200)
              data = JSONField()
          
              def __str__(self):
                  return self.name
          

          然后用这个创建:

          Dog.objects.create(name='Rufus', data={
               'breed': 'labrador',
               'owner': {
                   'name': 'Bob',
                   'other_pets': [{
                       'name': 'Fishy',
                   }],
               },
          })
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-12-05
            • 1970-01-01
            • 2020-07-11
            • 2017-12-01
            • 1970-01-01
            • 2021-06-28
            • 1970-01-01
            相关资源
            最近更新 更多