将Pyamf返回到Flex的Django对象时出现500错误

时间:2011-10-31 17:55:52

标签: django flex django-nonrel pyamf

我能够返回只有CharFields / Dates / Integers的django模型,但现在我正在尝试返回具有ForeignKey属性的模型,并且我在NetStatusEvent.NET_STATUS onError事件处理程序中的Flex中收到此错误:

m_info  Object (@16491fe9)  
code    "NetConnection.Call.Failed" 
description "HTTP: Status 500"  
details "http://127.0.0.1:8000/gateway/"    
level   "error" 

以下是models.py中重要的模型:

class RewardActBase(models.Model):
    user = models.ForeignKey(User)
    start_date = models.DateTimeField(blank=True, null=True)
    progress_value = models.IntegerField(default=0)
    coupon_act = models.ForeignKey(CouponAct)

    class Meta:
        abstract = True


class ChallengeAct(RewardActBase):
    challenge = models.ForeignKey(Challenge)

    def __unicode__(self):
        return self.challenge.title'

class CouponAct(models.Model):
    coupon = models.ForeignKey(Coupon)
    earned_date = models.DateTimeField(blank=True, null=True)
    redeemed_date = models.DateTimeField(blank=True, null=True)
    expiration_date = models.DateTimeField(blank=True, null=True)

    def __unicode__(self):
        return self.coupon.title

然后,当我想通过pyamf检索这些对象时,这是我正在使用的方法,它给了我上面列出的错误:

@login_required
def get_challenge_act(http_request, location_id):
    user = http_request.user

    c = ChallengeAct();
    c.challenge = Challenge.objects.select_related().get(id=1)
    c.start_date = datetime.now()
    c.progress_value = 1
    c.user = user
    new_coupon_act = CouponAct()
    new_coupon_act.coupon = Coupon.objects.select_related().get(id=c.challenge.coupon.id)
    new_coupon_act.earned_date = datetime.now()
    new_coupon_act.save()
    c.coupon_act = new_coupon_act
    c.save()

    return c

有趣的是,如果我改变我的get_challenge_act方法以返回ChallengeAct对象的属性,我就不会收到错误。所以我可以返回属于ChallengeAct的属性或对象,但不能返回ChallengeAct本身。例如,以下代码返回没有错误的Challenge对象:

    return c.challenge

因此看起来在使用foreginkey模型作为属性返回Django模型时会出现问题?我做错了吗?

1 个答案:

答案 0 :(得分:0)

通过消除过程,我发现是ChallengeAct上的User对象引起了问题,并且通过在保存之后和返回之前将用户对象设置为None,我得到了模糊的500错误消失。 / p>

@login_required
def get_challenge_act(http_request, location_id):
user = http_request.user

c = ChallengeAct();
c.challenge = Challenge.objects.select_related().get(id=1)
c.start_date = datetime.now()
c.progress_value = 1
c.user = user
new_coupon_act = CouponAct()
new_coupon_act.coupon = Coupon.objects.select_related().get(id=c.challenge.coupon.id)
new_coupon_act.earned_date = datetime.now()
new_coupon_act.save()
c.coupon_act = new_coupon_act
c.save()
c.user = None

return c

我很想知道为什么会发生这种情况。有人有什么想法吗?

- 更新 - 我发现在运行runserver命令后,通过查看终端日志,我可以看到实际500错误是什么。所以实际的错误是:

Could not import "cpyamf.amf3": Disallowed C-extension or built-in module

我不确定那是什么,或者为什么我只在尝试在返回结果中包含用户对象时才得到它,但是现在我可以不包括用户对象以避免错误。