我有以下Django和Flex代码:
Django的
class Author(models.Model):
name = models.CharField(max_length=30)
class Book(models.Model):
title = models.CharField(max_length=30)
author = models.ForeignKeyField(Author)
的Flex
package com.myproject.models.vo
{
[Bindable]
[RemoteClass(alias="myproject.models.Book")]
public class BookVO
{
public var id:int;
public var title:String;
public var author: AuthorVO;
}
}
正如您在本示例中所看到的,Author是我的Book模型中的外键。现在,当我在Flex中调用BookVO时,我想要了解作者的姓名。因此,我希望以下代码可以工作,但“author_name”会产生null:
var book = new BookVO();
var author_name = book.author.name;
我意识到我可以直接调用AuthorVO,但问题的关键是当你的VO绑定到远程对象时,如何使用Flex检索外键值?我目前正在使用PyAMF来弥合Flex和Django之间的差距,但我不确定这是否相关。
答案 0 :(得分:1)
好的,这是一个例子......
型号:
class Logger(models.Model):
lname = models.CharField(max_length=80)
def __unicode__(self):
return self.lname
#
#
class DataSource(models.Model):
dsname = models.CharField(max_length=80)
def __unicode__(self):
return self.dsname
#
#
class LoggedEvent(models.Model):
# who's data is this?
who = models.ForeignKey(Logger)
# what source?
source = models.ForeignKey(DataSource)
# the day (and, for some events also the time)
when = models.DateTimeField()
# the textual description of the event, often the raw data
what = models.CharField(max_length=200)
# from -1.0 to 1.0 this is the relative
# importance of the event
weight = models.FloatField()
def __unicode__(self):
return u"%2.2f %s:%s - %s" % (self.weight, self.source, self.who, self.what)
#
#
这是我的amfgateway.py
def fetch_events(request, source):
events = LoggedEvent.objects.select_related().all()
return events
#
services = {
'recall.fetch_events': fetch_events,
}
gateway = DjangoGateway(services)
这是AMF呼叫接收方的动作脚本:
protected function onRetrievedEvents(result: Object): void {
for each(var evt: Object in result) {
var who: Object = evt._who_cache.lname;
...
evt._who_cache.lname使用select_related()填充,并在缺少select相关时丢失。如果我摆脱了select_related()调用,那么我会看到错误:
TypeError: Error #1010: A term is undefined and has no properties.
你必须使用RemoteClass尝试不同的技术...所以select_related可能根本就不是问题...(否则我的第一个答案就不会被否定了。)其余的由你决定。< / p>
答案 1 :(得分:0)
从数据库中获取图书时,请尝试使用select_related()
在这个页面上显示下来:
http://docs.djangoproject.com/en/dev/ref/models/querysets/
它,“将自动”跟随“外键关系,在执行查询时选择其他相关对象数据。这是一个性能助推器,导致(有时很多)更大的查询,但意味着以后使用外键 - 关键关系不需要数据库查询。“
我一直喜欢通过Flex的PyAMF无缝访问数据库。真是太棒了。