在JSON数据中只返回一个字段

时间:2014-09-02 08:01:28

标签: python json django

我想只返回clandpin字段。我有以下这个模型:

model.py

class ButuanMaps(gismodel.Model):
class Meta:
    verbose_name = u'Butuan Map'
    verbose_name_plural = u'Butuan Maps'

clandpin = gismodel.CharField("Land PIN", max_length=50, null=True, blank=True)
ssectionid = gismodel.ForeignKey(Section)
#ssectionid_id = gismodel.IntegerField()
geom = gismodel.MultiPolygonField("Geom ID", srid=32651, null=True, blank=True)
objects = gismodel.GeoManager()

def __unicode__(self):
    return self.clandpin

在我的模板中,这里是AJAX的代码:

     <script type="text/javascript">
$(document).ready(function() {
    $("#formsection").change(function() {
        $.ajax({
            url : "/sectionpins",
            type : "GET",
            dataType: "html",
            data : {
                'sectionid' : $('#formsection').val(),
                'csrfmiddlewaretoken' : $("input[name=csrfmiddlewaretoken]").val()
            },
            success : searchSuccess,
            error: errs
        });
    return false;
    });
});
function searchSuccess(data){
    alert("Success");
    $('#forminput').append(
            "<option value='"+data+"'>"+data+"</option>"
    );
}
function errs(){
    alert('Error!!!!');
}
</script>

在views.py中:

    def section_landpins(request):
if request.method == "GET":
    m = ButuanMaps.objects.filter(ssectionid=request.GET['sectionid'])
    landpins = serializers.serialize("json", m.values('clandpin'), fields=("clandpin"))
    data = json.dumps({
        'pins': landpins,
    })
    return HttpResponse(data, content_type='application/json')

它返回了错误

 AttributeError at /sectionpins'dict' object has no attribute '_meta'

当我用这个改变查询时:

 m = ButuanMaps.objects.filter(ssectionid=request.GET['sectionid'])

它没有返回错误,但是:

{"pins": "[{\"pk\": 185625, \"model\": \"tbl.butuanmaps\", \"fields\": {\"clandpin\": \"162-12-0001-055-37\"}}

1 个答案:

答案 0 :(得分:0)

您可以通过从ORM仅请求您感兴趣的字段,然后将ValueQuerySet评估为字典列表来执行此操作:

section_id = request.GET.get('sectionid', 'defaultid')

m = ButuanMaps.objects.filter(ssectionid=section_id).values('landpins')
return HttpResponse(json.dumps({'pins': list(m)}),
                               content_type='application/json')