我想在我的django应用程序中添加一个视图,以便显示表Barati
中的数据。
view.py
from django.http.response import Http404, HttpResponse
from django.template.response import TemplateResponse
from trello.models import Sveti, Barati
def get_index(request):
return TemplateResponse(request,'index.html')
def get_settings(request):
if not request.is_ajax():
raise Http404
svetebi = Sveti.objects.all()
res = '['
for sveti in svetebi:
res = res + '{"name": ' + sveti.name + ', "position": ' + str(sveti.position) + ', "cards": null},'
res = res[:-1]
res = res + ']'
return HttpResponse(res)
def add_sveti(request):
if not request.is_ajax():
raise Http404
sveti = Sveti()
sveti.name = request.GET['name']
sveti.position = request.GET['position']
sveti.save()
return HttpResponse('{"success":true}')
def add_barati(request):
if not request.is_ajax():
raise Http404
barati = Barati()
barati.text = request.GET['text']
barati.position = request.GET['position']
barati.sveti_id = request.GET['sveti_id']
barati.save()
return HttpResponse('{"success":true}')
models.py
from django.db import models
class Sveti(models.Model):
name = models.CharField(max_length = 50, default = 'sveti')
position = models.IntegerField()
class Barati(models.Model):
sveti = models.ForeignKey(Sveti)
text = models.CharField(max_length = 10000)
position = models.IntegerField()
我想将有关 Barati类(来自models.py)的信息添加到json格式的res中。但是我不能从这一点走得更远
答案 0 :(得分:1)
你做错了。 Python附带json module
import json
dat = Sveti.objects.values("name", "position")
json_data = json.dumps(dat)
Sveti.objects.values
创建包含所选字段的数据字典列表,然后您可以使用dumps
将其序列化为json
或者如果要序列化所有值,可以使用django serializers
from django.core import serializers
json_data = serializers.serialize("json", Sveti.objects.all())
您可以使用这些方法序列化所需的Queryset。
如果要在同一json数据中组合这些数据,可以使用
json_data["sevni"] = serializers.serialize("json", Sveti.objects.all())
json_data["barati"] = serializers.serialize("json", Barati.objects.all())
>> print json_data
>> {"sveni": [{"id"............}, {.......}],
"barati": [{"id"............}, {.......}] }
答案 1 :(得分:0)
根据这个django documantation ==> https://docs.djangoproject.com/en/1.6/topics/serialization/
#select all or use some filter, no matter
barati_json = serializers.serialize("json", Barati.objects.all())
并返回return_json。这就是全部..
//编辑:使用dict来汇总json内容:
import json
return_dict = {
'barati': barati_json,
'some_other_integer_param1': 1,
'some_other_param':"blabla"
}
json.dumps(return_dict)
答案 2 :(得分:0)
您正在手动构建JSON字符串,这是不寻常的,也是不必要的。我建议使用此代码返回JSON中两个模型的所有实例:
import json
def get_settings(request):
if not request.is_ajax():
raise Http404
sveti_all = list(Sveti.objects.all())
barati_all = list(Barati.objects.all())
return HttpResponse(serializers.serialize('json', sveti_all + barati_all))
答案 3 :(得分:0)
我最近不得不自己将一些数据序列化到json,这是我觉得有用的。
在models.py中:
class Person(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField()
address = models.CharField()
extra1 = models.CharField()
extra2 = models.CharField()
def as_my_person(self):
return {
"id":self.id,
"name":self.name,
"address":self.address
}
在上面的例子中,我有一个有5个字段的模型,我只希望我的json数据有id,name和address。
在我的views.py中:
def person_view(request):
data = Person.objects.filter(name__contains='john')
dictionaries = [obj.as_my_person() for obj in data]
serialized_data = simplejson.dumps(dictionaries)
return HttpResponse(serialized_data, mimetype='application/json')
上面的代码应该返回一个名为'john'的所有人的json字符串。
[{ "id":1,"name":"john smith","address":"123 Main" }, { "id": 5, "name":"john doe", "address":"123 state" }]
我发现这是一种快速而简单的方法,可以将JSON数据格式化并返回到任何前端UI框架,如剑道。
希望它有所帮助。