如何从Json对象的外键获取名称值

时间:2014-06-12 10:13:56

标签: python django angularjs

我在我的一个项目中使用过Django。我也使用了angularjs。提到我在Django和Angularjs中很新。现在我的观点之一是我从我的模型之一检索数据,即 SubscribePlan

def subscribed(request):
    from django.core import serializers
    subscribedplan = SubscribePlan.objects.filter(user = request.user)
    subscribing = serializers.serialize('json',subscribedplan)

    return HttpResponse(subscribing)

并且 SubscribePlan 的models.py是

class SubscribePlan(models.Model):
    plan = models.ForeignKey(Plan)
    expiriary_date = models.DateTimeField()
    user = models.ForeignKey(User)

在这里你可以看到计划是一个外键。现在我使用模板中的anuglarjs来获取数据以显示名称使用上面给出的视图订阅 .i的关联用户的计划。在此tempalate中使用了angularjs,就像这样..

{% extends 'userena/base_userena.html' %}

{% load i18n %}
{% load url from future %}

{% block title %}{% blocktrans with profile.user.username as username %}{{ username }}'s profile.{% endblocktrans %}{% endblock %}
{% block content_title %}<h2>{{ profile.user.username }} {% if profile.user.get_full_name %} ({{ profile.user.get_full_name }}){% endif %}</h2>{% endblock %}

{% block content %}


   <div class="panel-body">

     <h4 ng-controller='SubscribedPlanCtrl'>Subscribe Plan: <span style = "color:red">{[{subscribedplan.0.plan}]}</span></h4>

   </div>

{%block extrajs%}
    <script type="text/javascript">
var app = angular.module('shutter',[]);
app.config(function($httpProvider){
//$httpProvider.defaults.headers.post['X-CSRFToken'] = {% csrf_token %};
$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
});
app.config(function($interpolateProvider) {
$interpolateProvider.startSymbol('{[{');
$interpolateProvider.endSymbol('}]}');
});   




app.controller('SubscribedPlanCtrl',['$scope','$http',function($scope,$http){

  $http.get('/showphoto/subscribing/').success(function(subdata){

    $scope.subscribedplan = subdata;

   }).error(function(subdata,status){
        $scope.datas = subdata || "Request Fail";
        $scope.status = status;
        console.log(status);


});
}]);
 </script>
{%endblock%}            
{% endblock %}

在模板中,您可以看到我使用 {[{subscribedplan.0.plan}]} 来显示计划的名称。

但问题是,不是显示计划的名称,而是显示计划 ID 。请注意< strong>计划是外键。现在我如何显示计划的名称。

1 个答案:

答案 0 :(得分:1)

您可以使用Django的natural keys或自己构建JSON对象。后者很好,在这种情况下,因为它是一个小模型,你不需要反序列化它。示例代码(未经测试):

from json import json

def subscribed(request):
    subscribedplan = SubscribePlan.objects.filter(user=request.user)[0]
    json_obj = [{"plan": subscribedplan.plan.name }, ]

    return HttpResponse(json.dumps(json_obj))

会推荐更完整的软件包,例如django-angular,以便更好地集成。

相关问题