2011-10-31 41 views
0

我能夠返回只有CharFields/Dates/Integers的django模型,但現在我試圖返回具有ForeignKey屬性的模型,並且出現此錯誤Flex中我NetStatusEvent.NET_STATUS onerror事件處理程序:當Pyamf返回Django對象時發生500錯誤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本身。例如,下面的代碼返回一個挑戰對象沒有任何錯誤:

return c.challenge 

所以它似乎有一些問題與迴歸模型foreginkey一些屬性的Django模型?難道我做錯了什麼?

回答

0

通過淘汰過程,我發現它是ChallengeAct上的用戶對象導致了問題,並且在保存之後和返回之前通過將用戶對象設置爲None來消除模糊500錯誤。

@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 

我很想聽聽爲什麼會發生這種情況。有人有主意嗎?

--update--我發現,通過查看終端日誌,運行我的runserver命令後,我可以看到實際的500錯誤是什麼。所以實際的錯誤是:

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

我不知道那是什麼,或者爲什麼我在嘗試,包括我的返回結果的用戶對象僅當,但現在我可以不包括用戶對象以避免錯誤。

相關問題