django传递嵌套对象给flex前端的方法(原创)

问题的描述:在后台,python定义了如下两个模型。
  class Users(models.Model):
      username = models.CharField(primary_key = True, max_length = 30)
      password = models.CharField(max_length = 30)
      nickname = models.CharField(max_length = 30)

      def __unicode__(self):
          return self.username

class Diary(models.Model):
       user       = models.ForeignKey(User s)
      Title      = models.CharField(max_length = 100)
      Content    = models.CharField(max_length = 1000) #no restriction
      Type       = models.CharField(max_length = 30)
      Attri      = models.CharField(max_length = 10)
      PublicDate = models.DateField()

      def __unicode__(self):
          return self.Title

可以看出,这里Diary模型引用了user模型。现在通过在后台检索Diary后,想返回diary的对象集合给Flex前台。
解决方法:这里切记不要直接返回Diary的对象,比如return Diary.objects.get(user = u)//u = User.objects.get(username = 'caihaibin')
这样返回给flex前端后,会发现user属性为空。
  var obj:Object = re.result as Object;
    for (var i:String in obj)   // 这句话是遍历obj的所有属性 ,i一定要为String类型
    {
        if( i == 'user')        // 如果为user属性
        {
            for(var j:String in obj[i])  // 遍历user的属性
            {
                trace(j, obj[i][j]);
            }
        }
        trace(i, obj[i]); // i属性名,obj[i]属性值
    }
//输出结果如下:
Title i love you
Content caihaibin love huangzhaoying
Type abc
id 1
Attri private
nickname David Cai
username caihaibin
password 860105
user null(可以发现。。这里输出的属性为空,这是因为我们直接返回的是Diary的对象,而在Diary对象中user只是一个引用,比如可能只是个指针)
PublicDate Fri Aug 21 08:00:00 GMT+0800 2009

正确的方法:return Diary.objects. select_related().filter(user = u),重新trace,可得:
Title i love you
Content caihaibin love huangzhaoying
Type abc
id 1
Attri private
nickname David Cai  //哈哈,得到正确的结果。
username caihaibin
password 860105
user [object Object]
PublicDate Fri Aug 21 08:00:00 GMT+0800 2009


还有,再次重申一下,如果碰到Http:State:500的错误,一定是程序的错误!我昨晚也碰到这个问题,检查了一遍又一遍我的程序,没有发现任何问题,结果却一直错误。所以我认为django不能够返回嵌套模型给前台,但是转念一想,Django这么强大,没理由不支持这种这么简单的操作啊。。。。最后,费了九牛二虎之劲,终于在程序中找到了那个隐蔽的错误。
                                      ----David Cai 09-08-22晨于金山公司

转载于:https://www.cnblogs.com/xingluzhe/archive/2009/08/22/1551817.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值