4

我有以下 Django 和 Flex 代码:

姜戈

class Author(models.Model):
  name = models.CharField(max_length=30)

class Book(models.Model):
  title = models.CharField(max_length=30)
  author = models.ForeignKeyField(Author)

柔性

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 之间的差距,但我不确定这是否相关。

4

2 回答 2

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 调用接收方的 Actionscript:

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_related() 调用,那么我会看到错误:

TypeError: Error #1010: A term is undefined and has no properties.

您必须尝试使用​​ RemoteClass 使用不同的技术...所以 select_related 可能根本不是问题...(否则我的第一个答案不会被否定。)其余的取决于您。

于 2009-01-27T12:31:10.947 回答
0

当您从数据库中获取您的书时,请尝试使用 select_related()

这是此页面上的方式:http:
//docs.djangoproject.com/en/dev/ref/models/querysets/

它,“将自动“遵循”外键关系,在执行查询时选择额外的相关对象数据。这是一种性能提升器,会导致(有时很多)更大的查询,但意味着以后使用外键关系会获胜不需要数据库查询。”

我一直喜欢通过 Flex 的 PyAMF 无缝访问数据库。真是太棒了。

于 2009-01-26T20:25:12.300 回答