Ошибка 500 при возврате объекта Django с Pyamf во Flex - PullRequest
0 голосов
/ 31 октября 2011

Я могу вернуть модели django, которые имеют только CharFields / Dates / Integers, но сейчас я пытаюсь вернуть модели, которые имеют свойства ForeignKey, и я получаю эту ошибку в Flex в моем обработчике событий NetStatusEvent.NET_STATUS onError:

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

Таким образом, возникает проблема с возвратом модели Django с моделями foreginkey в качестве свойств?Я что-то не так делаю?

1 Ответ

0 голосов
/ 01 ноября 2011

В процессе удаления я обнаружил, что это был объект User в ChallengeAct, который вызывал проблему, и я получил неоднозначную ошибку 500, чтобы уйти, установив для пользовательского объекта значение None после сохранения и прямо перед возвратом.

@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-- Я обнаружил, что могу видеть, что на самом деле является ошибкой 500, посмотрев журнал терминала после выполнения моей команды runserver.Таким образом, фактическая ошибка была:

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

Я не уверен, что это такое, или почему я получаю его только при попытке включить пользовательский объект в мой возвращаемый результат, но сейчас я могу просто не включатьпользовательский объект, чтобы избежать ошибки.

...