我是django的新手,我试图将 json保存到数据库。问题是,我能够在我的视图中获取数据但不确定如何将其保存在数据库中。我试图保存评论
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
提前致谢........如果有更好的方法,请告诉我......
答案 0 :(得分:6)
如果您正在使用Postgres,则可以使用JSONField
(read more)存储json,但如果不是,则需要将json解析为字符串并使用{{1}保存CharField
}}。要恢复数据,请使用json字符串与json.dumps(data)
请记住导入json lib:json.loads(json_string)
答案 1 :(得分:3)
如果要存储完整的JSON,请尝试使用django-jsonfield项目:https://github.com/dmkoch/django-jsonfield
答案 2 :(得分:2)
如果我清楚地理解你的问题那么 你的观点应该是这样的。
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()
答案 3 :(得分:2)
假设一个模型:
class User(models.Model):
name = models.CharField()
phone_number = models.CharField()
发送{{name“:” Test User“,” phone_number“:” 123-456-7890“}}的
在视图中,您可以执行以下操作将其保存到数据库中。
def SaveUser(request):
body_unicode = request.body.decode('utf-8')
body = json.loads(body_unicode)
u = User(**body)
u.save()
return JsonResponse({"result": "OK"})
答案 4 :(得分:0)
根据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',
}],
},
})