django传递嵌套对象给flex前端的方法(原创)
2009-08-22 09:09
525 查看
问题的描述:在后台,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(Users)
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晨于金山公司
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(Users)
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晨于金山公司
相关文章推荐
- MVC 中前端传递Json数据,后端以对象形式接受参数的处理方法
- Flex 不同前端界面传递相同对象,ASObject 第一次转换正常,第二次转换异常的解决方案
- asp.net MVC接收前端传递的复杂json对象的简单处理方法
- Flex 对Java端返回Collection的处理方法--java 与flex对象的相互传递
- ASP.NET页面间传递对象的另类方法
- vue组件传递对象中实现单向绑定的方法
- 解决方法:Submit 操作失败。为类型“BomExtend”上的集合属性“BomChildrenList”传递了一个或多个关联对象,但目标集合为 null。
- Android中Intent传递对象的两种方法(Serializable,Parcelable) .
- android通过ksoap访问webservice方法传递一个复杂对象参数
- ASP.NET页面间传递对象的另类方法
- Android中Intent传递对象的两种方法(Bundle.putParcelable/putSerializable)!
- Android中Intent传递对象的两种方法(Serializable,Parcelable)
- Android中Intent传递对象的两种方法(Serializable,Parcelable)
- jframe 对象(GroupedAction)传递无法调用对象的方法解决办法
- Android中Intent传递对象的两种方法(Serializable,Parcelable)
- Intent传递对象的两种方法(Serializable,Parcelable) (转)
- 第02天OC语言(08):对象作为方法的参数连续传递上
- Django后台获取前端post上传的文件方法
- Intent传递对象的两种方法(Serializable,Parcelable)
- 前端必须会的5个原生JavaScript对象方法